Совместимость скриптов Greasemonkey с Firefox, Safari, Opera и Chrome (событие onload)

Скажем, вы хотели, чтобы скрипт Greasemonkey был совместим с Safari и Chrome.

Тогда как в Firefox сценарии Greasemonkey запускаются только тогда, когда DOM готов. Похоже, что Chrome, Safari и Opera запускают сценарии Greasemonkey до того, как DOM будет готов.

Итак, я ищу решение, которое будет запускать только прослушиватель на странице, ожидая события загрузки / готовности DOM и, получив это событие, затем запустить остальную часть сценария. Если они используют браузер Chrome, Safari или Opera. Если они используют Firefox, просто запустите сценарий и не беспокойтесь о прослушивателе событий.

Как закодировать это?

@NV

Спасибо NV, знаете ли вы, что этот скрипт также совместим с Google Chrome?

Будет ли код

(function(){

    // Code here run after 'load' event in all browsers.

})();

также запустить на DOM готов в Google Chrome?

12.10.2009 21:37:36
3 ОТВЕТА

Я полагаю, вы могли бы посмотреть, как библиотеки JavaScript, такие как JQuery, справляются с этим. Вероятно, это будет слишком большой вес, чтобы его использовать, но они, безусловно, уже решили эту проблему.

-1
14.10.2009 21:36:00

Прежде всего, взгляните на Nice alert UserJS. Это работает на Greasemonkey, Opera и Safari Greasekit.

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

... safari + opera, похоже, запускает скрипты gm до того, как dom будет готов.

На самом деле все сложнее. Opera имеет режим совместимости с greasemokey . Все сценарии с именем yada- yada .user .js работают в совместимом режиме и запускаются после готовности DOM.

ПРИМЕЧАНИЕ: оберните ваш код в анонимную функцию, чтобы предотвратить утечку переменных в объект глобального окна (это происходит в Opera).

(function(){

  // Some code

})();

В этом случае Safari Greasekit работает как Firefox Greasemonkey.

1
6.12.2009 22:34:45
Простое завершение кода в анонимной функции НЕ задерживает выполнение до окончания события загрузки. Таким образом, первая часть ответа выше неверна и вводит в заблуждение.
hallvors - restore Monica 6.12.2009 19:34:09
Холворс, ты прав! Возможно я не говорю ясно. Я обновил ответ.
NVI 6.12.2009 22:41:41

Я взял минимизированный jQuery и скопировал его в свой пользовательский скрипт, а затем сделал классический

  $(document).ready(function() {
      // Put all your jQuery goodness in here.
  });

Который имеет дополнительный бонус за предоставление вам jQuery, все это заключено в функцию, упомянутую в другом вопросе:

(function(){

  // Some code.

})();

Вы можете использовать материал Greasemonkey для импорта jQuery через URL вверху, но это зависит от Greasemonkey, Chrome / Opera и т. Д. Не будет совместимым, если вы сделаете это таким образом.

0
10.03.2010 17:57:53