Как запустить Greasemonkey перед чем-либо еще на странице? - PullRequest
4 голосов
/ 02 апреля 2009

Можно ли запускать сценарии Greasemonkey до чего-либо еще на странице?

Мне известно о @run-at document-start, но, похоже, он запускается сразу после тега <HTML>. Обычно это не проблема, но если страница не отформатирована, как в примере ниже, похоже, я ничего не могу сделать.

Буду признателен за любые предложения или идеи. Спасибо!

<script>alert('This is an annoying message.');</script>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
        <HEAD>
...etc...

Ответы [ 3 ]

3 голосов
/ 22 января 2012

На самом деле, @run-at document-start действительно в значительной степени запускает скрипт GM, прежде чем что-либо со страницы.

В вашем случае следующий код будет работать вместе с @run-at document-start:

_oldAlert           = alert;
unsafeWindow.alert  = function () {};

/*-- Optionally, wait for the DOM, then set an onload handler to restore
    alert().
*/
2 голосов
/ 04 апреля 2009

Это невозможно, потому что HTML требует, чтобы сценарии выполнялись во время анализа или не выполнялись вообще, например, это разрешено:

<script> document.write('<!'+'--'); </script>

Если браузер пропустит этот скрипт, не выполнив его, он увидит совершенно другой документ, поэтому вы не можете проанализировать DOM документа HTML до запуска скриптов.

Opera решает эту проблему в UserJS , запуская события BeforeScript, позволяя UserJS изменять / удалять скрипты в самый последний момент.

0 голосов
/ 02 апреля 2009

Вы пробовали:

(function() {
    var yourFunction = function() 
    {
       // ...
    }
    window.addEventListener("load", yourFunction, false);
})();
...