Есть ли простой способ сделать это.И есть ли что-то, что нужно изменить из-за различий в том, как оно работает?
Самый простой способ сделать это:
Запустите код букмарклета через URL-декодер . так что javascript:alert%20('Hi%20Boss!')%3B, например, становится: javascript:alert ('Hi Boss!');
javascript:alert%20('Hi%20Boss!')%3B
javascript:alert ('Hi Boss!');
Удалите ведущую javascript:. Результат: alert ('Hi Boss!');
javascript:
alert ('Hi Boss!');
Добавьте этот код в конец файла Greasemonkey. Например, создайте файл с именем Hello World.user.js , с этим кодом:
// ==UserScript== // @name Hello World! // @description My first GM script from a bookmarklet // @include https://stackoverflow.com/questions/* // @grant none // ==/UserScript== alert ('Hi Boss!');
Открыть Hello World.user.js с Firefox ( Ctrl O ). Greasemonkey предложит установить скрипт.
Теперь код букмарклета будет автоматически запускаться на любых страницах, которые вы указали с помощью директив @include и @exclude.
@include
@exclude
Обновление: Чтобы обеспечить максимальную совместимость, используйте директиву @grant none, которая была добавлена в более поздних версиях Greasemonkey и Tampermonkey.
@grant none
ВАЖНО:
Пользовательский скрипт запустится гораздо раньше, чем вы сможете активировать закладку. Обычно это не проблема.
Но в некоторых случаях вам может понадобиться дождаться полной загрузки некоторой части страницы . В этом случае вы можете использовать методы / утилиты, такие как waitForKeyElements .
См. Также, Выбор и активация правильных элементов управления на сайте, управляемом AJAX .
Если вы все еще не можете заставить свой новый скрипт работать, обязательно прочитайте Мой очень простой скрипт Greasemonkey не запущен? . Выполните шаги и включите указанную информацию в любой вопрос, который вы открываете о проблемах с новым сценарием.
Вот очень хорошая статья, чтобы избежать распространенных ошибок из-за различий между "обычным" JS и Greasemonkey.
Самые важные вещи в начале:
window.setTimeout("my_func()", 1000);
window.setTimeout(my_func, 1000);
window.setTimeout(function(){doSomething(); doSomethingOther();}, 1000);
element.onclick
element.addEventListener("click", my_func, true);
Некоторый код, который обычно возвращает различные объекты DOM, в среде Greasemonkey возвращает эти объекты, заключенные в XPCNativeWrapper.Это по соображениям безопасности.
Некоторые методы и свойства являются «прозрачными», и вы можете вызывать их на обернутом объекте, но некоторые нет.Читайте в упомянутой статье о том, как обойти это;Вы также можете использовать (как правило, не рекомендуется, но для тестирования и т. д.) свойство wrappedJSObject.Когда obj.something / obj.something() не работает в Greasemonkey, попробуйте obj.wrappedJSObject.something / obj.wrappedJSObject.something().
obj.something
obj.something()
obj.wrappedJSObject.something
obj.wrappedJSObject.something()