Совместимость скриптов Greasemonkey с Firefox, Safari, Opera и Chrome (событие onload) - PullRequest
5 голосов
/ 13 октября 2009

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

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

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

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

@ NV

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

Будет ли код

(function(){

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

})();

также работает на DOM, готовом в Google Chrome?

Ответы [ 3 ]

1 голос
/ 15 октября 2009

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

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

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

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

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

(function(){

  // Some code

})();

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

0 голосов
/ 05 января 2010

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

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

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

(function(){

  // Some code.

})();

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

0 голосов
/ 15 октября 2009

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

...