window.load не всегда срабатывает на Chrome? - PullRequest
3 голосов
/ 22 марта 2012

У меня есть такой пользовательский скрипт:

// ==UserScript==
// @name          test
// @namespace     test
// @description   show's an alert on load
// @include       http://*
// @include       https://*
// ==/UserScript==

window.addEventListener('load', function(){alert("loaded");}, false);

Это отлично работает в Firefox на всех страницах, но в некоторых случаях вообще не работает в Chrome.

Один из примеров:http://lexin.nada.kth.se/lexin/ При вводе ссылки в адресе и нажатии Enter, страница загружается в обычном режиме, но оповещение не появляется.Если вы нажмете F5, чтобы обновить страницу, появится всплывающее окно.

Есть ли какое-то объяснение этому странному поведению?

Ответы [ 2 ]

7 голосов
/ 22 марта 2012

Причина проблемы в том, что скрипт Content иногда выполняется, когда документ уже полностью загружен. Это иллюстрируется с использованием следующего сценария содержимого («Пользовательский сценарий»):

// ==UserScript==
// @name          Test
// @namespace     Test
// @include       *
// ==/UserScript==

window.addEventListener('load', function(){alert("loaded");}, false);
alert(document.readyState);   // When this prints "complete", onload never runs

Чтобы решить эту проблему, используйте мета-правило @run-at document-start, которое заставляет скрипт выполняться до создания документа:

...
// @run-at   document-start
// ==/UserScript==
0 голосов
/ 22 марта 2012

Этот вызов может быть загружен слишком поздно на странице. Добавьте этот код в самый верх страницы и посмотрите, исправит ли это.

Если это не так, пожалуйста, опубликуйте дополнительную информацию. (Где выполняется звонок? Еще немного информации на странице? Это вызывается из внешнего файла .js?)

...