2016-03-08 7 views
1

Насколько это возможно, определить, был ли элемент DOM изначально указан в исходном коде или вводился через другой js, например. рекламный сервер?Был ли DOM-элемент введен в JS?

Просмотр мутаций не является решением, так как я получаю доступ к странице после отображения страницы.

+3

Я держал пари, что нет никакого способа, чтобы сделать это, если вы только начинаете наблюдая полностью предоставленную DOM. Сам DOM не отличает его узлы от того, был ли он отображен из HTML или с помощью DOM-манипуляций. –

+2

Единственный способ, о котором я могу думать, это перезагрузить страницу в другом окне или в iframe и добавить MutationObserver на этом. Затем вы можете получить позицию в DOM и найти, какие элементы соответствуют в исходном окне. – Kaiido

+0

@ Кайдо, прослушивание мутаций я могу получить источник мутации? Могу ли я увидеть, что вызвало мутацию? – Manuel

ответ

0

Если вы можете сохранить исходный код HTML до каких-либо дальнейших действий js, чем сравнить новый HTML с старым, а если они не равны - элемент вставлен через js.

+1

«Наблюдение за мутациями не является решением, так как я получаю доступ к странице после отображения страницы». – clinei

+0

Даже если бы не было этого ограничения, 'document.body.style.width = '500px'' изменит внешнийHTML, даже если вы не ввели элемент body через js. – Kaiido

1

если вы что проверить исходный HTML вы можете сделать запрос Ajax на страницу, получить содержание и проверить различия

2

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

Я сделал два скрипок, чтобы показать, как это можно сделать: target site, your JS

Сравнения документов может быть сделано с isEqualNode

+0

Вы должны по крайней мере сравнить результат анализа 'DOMParser'. Но установка атрибута элемента через js не означает, что вы ввели этот элемент. – Kaiido

+0

Есть ли альтернатива DOMParser, которая выполняет встроенные js, но не включает внешние js? – Manuel

+0

@Manuel 'DOMParser' не выполняет никаких скриптов. Вы можете удалить скрипты из разбора DOM на основе их атрибута 'src', а затем поместить содержимое в заставку' iframe', позволить загружать содержимое и затем сравнивать __that__ – clinei

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