Как я могу заставить greasemonkey вызывать функцию на странице после ее загрузки - PullRequest
28 голосов
/ 14 января 2009

У меня есть очень простой скрипт greasemonkey, который я хочу вызвать на странице уже существующей функцией javascript. Я прочитал документацию и, похоже, ничего не работает

window.setTimeout(function() { 
    alert('test') // This alert works, but nothing after it does
    myFunction() // undefined
    window.myFunction() // undefined
    document.myFunction() // undefined
}, 1000);

Ответы [ 3 ]

26 голосов
/ 14 января 2009

Попробуйте использовать: unsafeWindow.myFunction ();

Подробнее и информация - http://wiki.greasespot.net/UnsafeWindow

17 голосов
/ 14 января 2009

Один из способов вызова функции на исходной странице выглядит следующим образом:

location.href = "javascript:void(myFunction());";

Это немного некрасиво. Существует также unsafeWindow , предоставляемое GreaseMonkey, но авторы советуют не использовать его.

unsafeWindow.myFunction();

Выглядит аккуратнее, но убедитесь, что вы понимаете последствия. Из руководства:

unsafeWindow обходит Greasemonkey's Модель безопасности на основе XPCNativeWrapper, который существует, чтобы убедиться, что вредоносные веб-страницы не могут изменить объекты таким образом, чтобы сделать скрипты greasemonkey (которые выполняют с большими привилегиями, чем обычные Javascript работает на веб-странице) сделать вещи, которые сделали их авторы или пользователи не намерены. Пользовательские скрипты должны поэтому избегайте звонить или в любом другой способ в зависимости от любых свойств на unsafeWindow - особенно если они выполняются для произвольных веб-страниц, например, с @include *, где Авторы страницы, возможно, подорвали окружающая среда таким образом.

Другими словами, ваш скрипт повышает привилегии, доступные для оригинального скрипта страницы, если вы используете unsafeWindow.

7 голосов
/ 03 февраля 2009

Вы можете попробовать использовать прослушиватели событий javascript.

Они исполняют код в ответ на происходящие события объекта (такие как загрузка страницы)

Например, чтобы выполнить код при загрузке страницы:

window.addEventListener('load', function () 
{
    /* code goes here */
}
...