Подтвердить что ты не робот

Захват источника страницы (моментальный снимок HTML) После Angular Templating

Быстрый angular.js вопрос...

Если у меня есть веб-страница с контентом вроде этого:

<div>{{message}}</div>

И я установил модель для "сообщения", чтобы

$scope.message = "Hello world!"

Затем на экране содержимое div будет отображаться как

Hello world!

Но если я просматриваю источник в Chrome или Firefox, источник все равно выглядит следующим образом:

<div>{{message}}</div>

Есть ли способ захватить источник страницы после Angular templating, поэтому, когда я просматриваю исходный код, я вижу

<div>Hello world!</div>

Например, если я работаю над проектом, в котором я использую Angular, чтобы помочь мне с шаблоном, но клиент хотел бы получить последние страницы в HTML без angular, как я мог бы захватить HTML-страницы после того, как шаблон был применен для предоставления этому клиенту?

4b9b3361

Ответ 1

https://github.com/cburgdorf/grunt-html-snapshot

Это задача, которая делает снимок HTML на странице: он запустит страницу в "поддельном" или "безгласном" браузере, называемом phantomjs, выполнит запуск javascript, а затем сохранит отображаемый HTML для вас.

Вот шаги по настройке Grunt для этого, из ничего:

  • Установите node.js из http://nodejs.org - это установит node и npm (node диспетчер пакетов) для тебя. Grunt доступен на npm.
  • Откройте свою командную строку и перейдите в папку проекта.
    • В окнах: cd c:/myprojects/superproject
    • На mac: cd /Users/itcouldevenbeaboat/myprojects/superproject
    • В linux: i hope you know how to do this already if you use linux :D
  • Запустите npm install -g grunt-cli, чтобы установить инструменты командной строки grunt глобально.
  • Запустите npm install grunt grunt-html-snapshot, чтобы установить локальную копию всего необходимого для запуска проекта проекта, а также задачу моментального снимка html.
  • Создайте суперпростой Gruntfile.js в корне вашего проекта с помощью этого содержимого:

    module.exports = function(grunt) {
      grunt.loadNpmTasks('grunt-html-snapshot');
    
      grunt.initConfig({
        htmlSnapshot: {
          all: {
            options: {
              snapshotPath: 'snapshots/',
              sitePath: 'www/index.html', 
              urls: ['#/home', '#/about', '#/users/itcouldevenbeaboat']
            }
          }
        }
      });
    
      grunt.registerTask('default', ['htmlSnapshot']);
    };
    
  • Запустите grunt в корне вашего проекта, и он сделает снимок: -)

Возможно, вам сначала нужно запустить свой сайт на сервере и установить sitePath в файле Gruntfile, чтобы указать на то, что он будет работать правильно.

Посмотрите на страницу grunt-html-snapshot, если вам нужна помощь в настройке моментального снимка.

Ответ 2

Как сказал Лэнгдон, Chrome сделает это. Мне удалось сделать это через опцию "Редактировать как HTML" в Chrome Inspector.

Сначала сохраните страницу (теперь PAGE_ORIGINAL) как "Веб-страница, заполните". (Сохраненная страница будет называться PAGE_COPY.)

  • Откройте Chrome и проверьте любой элемент на PAGE_ORIGINAL. Инспектор откроется.
  • Щелкните правой кнопкой мыши тег body PAGE_ORIGINAL, выберите "Редактировать как HTML" и скопируйте тег и все внутри.
  • Замените тело и его содержимое на PAGE_COPY на то, что вы только что скопировали.
  • Удалите Angular, удалив ссылки на него на PAGE_COPY.

Работал для меня.:-) (Я пробовал комментировать Langdon ответ, но не хватило репутации.)

Ответ 3

Невозможно "посмотреть источник" в традиционном смысле и увидеть HTML, измененный с помощью Angular. Это потому, что источник представления будет показывать источник с сервера, а Angular только вносит изменения в разметку, уже загруженную с сервера.

Что вы хотите сделать, это использовать инспектор Chrome (F12) или FireBug (возможно, все еще существует) в FireFox. Инспектор Chrome и FireBug покажут вам "активный" источник или то, как HTML выглядит в то время, когда вы его просматриваете.

Ответ 4

В Firefox просто используйте встроенные инструменты разработчика и выберите "Инспектор". Это дает вам текущую DOM, включая изменения, сделанные Angular.

Ответ 5

Если вы хотите быть уверены, что ваш контент готов до момента создания снимка, grunt-html-snapshots будет ждать, пока селектор будет виден в вывод (с помощью jQuery ( ": visible" )) перед тем, как сделать снимок. Конкретные параметры конфигурации моментальных снимков найдены здесь.

Ответ 6

У меня было такое же требование, но мне нужен html из одного сеанса браузера. Простое решение заключалось в использовании element.innerHTML.

(Все еще думая, что было бы неплохо избавиться от всех атрибутов ng- * и других angular -специфических атрибутов.)