Ответ 1
Попробуйте использовать: unsafeWindow.myFunction();
Подробнее и информация - http://wiki.greasespot.net/UnsafeWindow
У меня очень простая greasemonkey script, которую я хочу назвать уже существующей функцией javascript на странице. Я прочитал документацию и ничего не работает
window.setTimeout(function() {
alert('test') // This alert works, but nothing after it does
myFunction() // undefined
window.myFunction() // undefined
document.myFunction() // undefined
}, 1000);
Попробуйте использовать: unsafeWindow.myFunction();
Подробнее и информация - http://wiki.greasespot.net/UnsafeWindow
Один способ вызова функции на исходной странице выглядит следующим образом:
location.href = "javascript:void(myFunction());";
Это немного уродливо. Существует также unsafeWindow, предоставленный GreaseMonkey, но авторы советуют не использовать его.
unsafeWindow.myFunction();
Выглядит более аккуратно, но убедитесь, что вы понимаете последствия. Из руководства:
unsafeWindow обходит Greasemonkey's Модель безопасности XPCNativeWrapper, которая существует, чтобы вредоносные веб-страницы не могут объектов таким образом, чтобы скрипты greasemonkey (которые выполняются с большим количеством привилегий, чем обычные Javascript работает на веб-странице) вещи, которые их авторы или пользователи сделали не намерены. Пользовательские скрипты должны поэтому избегайте звонить или в любом другой способ в зависимости от любых свойств на unsafeWindow - особенно если они выполняются для произвольных веб-страниц, например, с @include *, где авторы страниц могут быть подорваны таким образом.
Другими словами, ваш script повышает привилегии, доступные на исходной странице script, если вы используете unsafeWindow.
Вы можете попробовать использовать прослушиватели событий javascript.
Они выполняют код при ответе на события объекта (например, нагрузка на страницу)
Например, чтобы выполнить код при загрузке страницы:
window.addEventListener('load', function ()
{
/* code goes here */
}
Тестовый ответ. Я тестирую пользовательский скрипт stackoverflow.