#jquery #greasemonkey
#jquery #greasemonkey
Вопрос:
страница, для которой я пишу скрипт greasemonkey, уже включает jquery, поэтому я хотел бы знать, могу ли я получить доступ к уже включенным функциям jquery вместо того, чтобы включать jquery в мой скрипт greasemonkey.
в моих попытках jquery работает нормально, если я включаю его в свой скрипт. но я не нахожу функций, которые были включены на серверной странице. Я не контролирую сервер.
в основном просто любопытно, могу ли я получить доступ к этим функциям.
в худшем случае я включу код jquery в свой скрипт, так что это не серьезная проблема.
Комментарии:
1. Почему этот вопрос был отклонен? Для меня это выглядит как совершенно ясный вопрос.
2. Что такое
functions that were included by the server page
?3. $() и несколько других craigslist.org/js/jquery.js
4. Похоже, что они доступны через unsafeWindow. Есть ли более безопасный способ?
Ответ №1:
Это немного халтурно, но иногда вы можете запускать функции на странице, создав HTML-элемент triggerfunction и вставив его на страницу. Затем используйте Greasemonkey, чтобы щелкнуть по ссылке, когда вы хотите запустить функцию.
Например, представьте, что на странице есть функция под названием «runGame()». В начале вашего скрипта Greasemonkey у вас есть:
var triggerHTML = "<a id="triggerfunction" onclick="runGame()">triggerfunction</a>";
И вы вставляете его на страницу в подходящем месте. Например, представьте, что вы нашли место, перед которым он мог бы удобно располагаться:
target.parentNode.insertBefore(triggerHTML, target);
А затем позже, когда вы захотите запустить функцию, вы выполняете
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0,
false, false, false, false,
0, null);
var triggerGame= document.getElementById("triggerfunction");
triggerGame.dispatchEvent(evt);
Комментарии:
1. Где
runGame()
определено?2. Это пример функции, которая может быть включена в Javascript загружаемой страницы (например, между некоторыми тегами скрипта), но для которой нет элемента интерфейса HTML, на который вы могли бы нажать, чтобы запустить ее. Мой ответ показывает, как вы можете использовать Greasemonkey для добавления такого элемента, а затем «щелкнуть» по нему программно, чтобы запустить функцию. Вы можете заменить «runGame()» любой функцией, которая есть на странице, которую вы хотите запустить.
Ответ №2:
Вы должны вызывать скрипты страницы, используя unsafeWindow
, например, вместо $
того, что вы бы написали unsafeWindow.$
.
Но убедитесь, что вы понимаете угрозы безопасности, возникающие при использовании unsafeWindow — они описаны наhttp://wiki.greasespot.net/UnsafeWindow .