2014-08-29 2 views
0

Я делаю расширение Chrome, которое изменяет DOM страницы. Но я хотел бы дать пользователю возможность переключаться между страницей перед изменениями и измененной страницей.Как переключиться между исходным DOM и DOM, измененным сценарием Content?

Это немного похоже на перевод Google, где вы можете изменить язык оригинала и переведенное сообщение.

В моих поисках я ничего не нашел.

Я знаю JavaScript, но не JQuery.

Спасибо за помощь.

ответ

0

Вы можете сохранить все тело в переменной, а затем начать перезаписывать вещи. Если вы хотите отключить загрузку старого тела.

+0

Спасибо вам за ответ. Но поскольку я являюсь noob для javascript, как мне помещать DOM дыры в одну переменную и как я могу изменить копию этой переменной. Потому что document.getElementbyId, вероятно, не будет работать. – Phinux

+0

Разве это не спасло бы только ссылку на элемент тела? И если вы попытаетесь сделать копию DOM, вы обычно теряете обработчики событий. – Xan

0

Вы можете сохранить все исходное содержимое DOM в переменной перед запуском сценария содержимого. Вы можете сделать это, используя следующий код в верхней части вашего скрипта содержания:

var originalDOM = document.getElementsByTagName("*"); 

Это экономит весь DOM в массиве с именем originalDOM. * действует универсальный тег, запрашивающий каждый тег в документе. Вы можете узнать больше об .getElementsByTagName() API here.

+0

Но это, вероятно, не копии, а ссылки на элементы. Если после этого вы измените что-то в DOM, тогда 'originalDOM' будет содержать те же изменения. Кроме того, эта функция _particular_ возвращает список всех элементов, а не просто дерево всех элементов. Я не считаю это полезным. – Xan

+0

@Xan Это хороший момент. См. Мой другой ответ (я сохраняю этот ответ только для справки). – Kootling

0

Вы можете попробовать:

var html = document.getElementsByTagName("html")[0]; 
var page = html.innerHTML; 

Это даст вам все, что между <html> тегами. После того как сценарий содержание впрыскивается, запустите:

var newPage = html.innerHTML; 

Теперь, когда вы хотите, чтобы переключаться между страницами, просто запустите:

html.innerHTML = page; //or newPage 

Вы можете прочитать больше о() API .getElementsByTagName here

+0

За исключением того, что НЕ будет копировать прослушиватели событий или данные, прикрепленные к элементам по сценариям страницы, например данным jQuery. – Xan

+0

При этом (недействительный ответ в некотором роде) используйте 'document.documentElement' вместо поиска. – Xan

Смежные вопросы