Как получить измененный контент на странице?

Я написал пользовательский скрипт для последнего браузера Chrome. Кажется, скрипт не может получить измененное содержимое страницы после загрузки (например, после загрузки страницы я нажал ¿sth?, и появилось встроенное окно).

Даже если бы я использовал window.setTimeout(), я все равно не могу получить обновленный контент в обратном вызове таймера через document.getElementById(). Я просмотрел страницу и обнаружил, что всплывающий элемент существует в DOM.

Это ограничение пользовательского скрипта? Или можно использовать другие методы для получения обновления в пользовательском скрипте?

Обновление: я попробовал DOMSubtreemodified событие, как было предложено. Но поведение все равно странное.

Я добавил только одну строку JavaScript в пользовательский скрипт для my.safaribooksonline.com,

document.addEventListener("DOMSubtreeModified", function () {
    alert(eval('typeof OpenSignInPopup')); });

Но в окне предупреждения отображается «неопределенное» в качестве результата оценки OpenSignInPopup. Но я могу одновременно запустить оператор предупреждения в консоли скрипта на той же странице и показать результат как «функцию».

Эта функция не была загружена при первом запуске пользовательского сценария. Итак, как я могу использовать его в пользовательском скрипте?


person Thomson    schedule 13.10.2010    source источник
comment
Сценарии Chrome GM не могут получить доступ к Javascript страницы. Я обновил свой ответ ниже.   -  person Brock Adams    schedule 13.10.2010


Ответы (1)


Вам необходимо предоставить подробную информацию, например соответствующие фрагменты кода и целевые страницы.

В общем, вы можете запустить событие DOMSubtreeModified в chrome. Это должно дать вам доступ к измененному DOM.

Кроме того, вы уверены, что новый контент не находится в iframe?

Обновление для новой информации OP:

Но в окне предупреждения отображается «undefined» в качестве результата оценки OpenSignInPopup.

В Chrome код Greasemonkey не может так взаимодействовать с JS-функциями страницы. Вам нужно будет ввести свой код на страницу. См. этот ответ SO для получения дополнительной информации.

person Brock Adams    schedule 13.10.2010
comment
Спасибо, ссылка решила мою проблему, например, внедрить код в содержимое страницы. - person Thomson; 13.10.2010