Firefox extension: как гарантировать, что скрипт стартует после построения страницы?
Привет!
Пытаюсь написать своё первое расширение для Firefox и упираюсь в непонятное. Итак, текст скрипта test.js имеет вид: start = function() { console.log('Testing...'); var elem = document.querySelector('div.info'); elem.innerHTML = 'Testing: ' + elem.innerHTML; } start(); Соотвествующий файл manifest.json: { "manifest_version": 2, "name": "Test", "version": "1.0", "description": "Testing", "permissions": [ "*://pastvu.com/*" ], "content_scripts": [ { "matches": ["*://pastvu.com/p/*"], "js": ["test.js"] } ] } Я открываю страницу на сайте - скажем, https://pastvu.com/p/965925 - и, используя about:debugging#/runtime/this-firefox, временно загружаю расширение. Название фото меняется на "Testing: Памятник Петру I" - пока всё правильно. Но при перезагрузке страницы, а также при переходе на любое другое фото, название уже не меняется (хотя скрипт отрабатывает, что видно по выводу "Testing..." в консоли). После перезагрузки скрипта всё срабатывает, но тоже только один раз. Если я последнюю строчку скрипта заменяю на window.setTimeout(start, 500); то после перезагрузки страницы скрипт отрабатывает (но при переходе на новую страницу - нет), из чего я делаю вывод, что в первой версии он срабатывал до полного построения страницы. Вопрос - почему? Ведь скрипты расширения, вроде бы, должны отрабатывать только когда страница уже построена. И как сделать, чтобы всё работало без таймаутов и на всех страницах? Явное задание в свойствах скрипта "run_at": "document_idle" не помогает. Пытался экспериментировать с windows.onLoad, но изменений не увидел. Помогите, кто в теме. Владимир. |
Цитата:
Цитата:
Соответственно вам нужно отслеживать изменения элементов, их вставку на страницу. Это можно сделать при помощи MutationObserver Цитата:
Т. е. вы сейчас меняете текст при загрузке, но ещё нужно отслеживать изменения в DOM при помощи MutationObserver |
vgiv, что делать написали выше, а причина подробнее: никакого "перехода на новую страницу" на самом деле нет, только имитация, вы имеете дело скорее всего с SPA.
По хорошему надо понять на чём конкретно оно написано и по document_start выстраиваться в сам фреймворк, тогда можно будет очень точно и детально работать с тем что нужно. Но если разбираться неохота, то простое и злобное решение с MutationObserver работать будет в любом случае.) |
Malleys, Aetae, спасибо, буду разбираться.
|
Часовой пояс GMT +3, время: 14:35. |