Как преобразовать букмарклет в пользовательский скрипт Greasemonkey?

Есть ли простой способ сделать это. И есть ли что-то, что нужно изменить из-за различий в том, как это работает?


person Bigandrewgold    schedule 02.08.2011    source источник


Ответы (2)


Самый простой способ сделать это:

  1. Запустите код букмарклета через декодер URL. так что javascript:alert%20('Hi%20Boss!')%3B, например, становится:
    javascript:alert ('Hi Boss!');

  2. Снимите ведущий javascript:. Результат: alert ('Hi Boss!');

  3. Добавьте этот код в конец вашего файла 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!');
    
  4. Откройте Hello World.user.js в Firefox (CtrlO ). Greasemonkey предложит установить скрипт.

  5. Теперь код букмарклета будет запускаться автоматически на всех страницах, которые вы указали с помощью директив @include и @exclude.

  6. Обновление: для обеспечения максимальной совместимости используйте директиву @grant none, которая была добавлена ​​в более поздние версии Greasemonkey и Tampermonkey.


ВАЖНЫЙ:

person Brock Adams    schedule 02.08.2011
comment
Это здорово, но это будет запускаться автоматически на каждой странице. Все мои букмарклеты — это вещи, которые я хочу активировать только иногда (например, добавить страницу в закладки на Pinboard или найти ее на Wayback Machine). Как бы вы заставили его выполняться только тогда, когда я этого хочу? - person Nick S; 28.02.2018
comment
@NickS, вот для чего нужны директивы @include, @exclude и @match. - person Brock Adams; 28.02.2018
comment
Извините, позвольте мне уточнить: я имею в виду, что я хочу быть на странице, подумайте, эй, я хочу посмотреть это на Wayback Machine, щелкнуть что-то и выполнить мой скрипт (откроется новая вкладка с поиск Wayback Machine для текущего URL-адреса). Что я нажимаю? Как скрипт узнает, когда открывать вкладку? - person Nick S; 28.02.2018
comment
@NickS, это выходит за рамки комментариев. При необходимости откройте новый вопрос. Но имейте в виду, что то, о чем вы спрашиваете, вероятно, было освещено в других вопросах и ответах. - person Brock Adams; 28.02.2018
comment
Хорошо, это круто, может быть, я буду. Я только что понял, что одна из возможностей - добавить запись в контекстное меню, вызываемое правой кнопкой мыши. - person Nick S; 01.03.2018

Вот очень хорошая статья для избегайте распространенных ошибок из-за различий между обычным 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. Это из соображений безопасности.

    Некоторые методы и свойства прозрачны, и вы можете вызывать их для обернутого объекта, а некоторые нет. Читайте в упомянутой статье о том, как это обойти; вы также можете использовать (это не рекомендуется вообще, но для тестирования и т. д.) свойство wrapJSObject. То есть, когда obj.something/obj.something() не работает в Greasemonkey, попробуйте obj.wrappedJSObject.something/obj.wrappedJSObject.something().

person jakub.g    schedule 14.09.2011