Как преобразовать букмарклет в пользовательский скрипт Greasemonkey? - PullRequest
6 голосов
/ 02 августа 2011

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

Ответы [ 2 ]

5 голосов
/ 02 августа 2011

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

  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 ( Ctrl O ). Greasemonkey предложит установить скрипт.

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

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


ВАЖНО:

1 голос
/ 14 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...