Показать сообщение отдельно
  #1 (permalink)  
Старый 09.11.2019, 20:12
Новичок на форуме
Отправить личное сообщение для vgiv Посмотреть профиль Найти все сообщения от vgiv
 
Регистрация: 09.11.2019
Сообщений: 3

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, но изменений не увидел.

Помогите, кто в теме.

Владимир.
Ответить с цитированием