簡體   English   中英

如何將小書簽轉換為Greasemonkey用戶腳本?

[英]How to convert a bookmarklet into a Greasemonkey userscript?

有一個簡單的方法可以做到這一點。 由於運行方式的差異,是否需要更改任何內容?

最簡單的方法是:

  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. 使用Firefox( Ctrl O )打開Hello World.user.js Greasemonkey將提示您安裝腳本。

  5. 現在,bookmarklet代碼將自動在您使用@include@exclude指令指定的任何頁面上運行。

  6. 更新:為了確保最大的兼容性,請使用在更高版本的Greasemonkey和Tampermonkey中添加的@grant none指令。


重要:

這是一篇很好的文章, 可以避免由於“普通” JS和Greasemonkey之間的差異而引起的常見陷阱

一開始最重要的事情:

  • 不要將函數用作字符串,例如: window.setTimeout("my_func()", 1000); 而是window.setTimeout(my_func, 1000); window.setTimeout(function(){doSomething(); doSomethingOther();}, 1000);
  • 不設置element.onclick而是設置element.onclick element.addEventListener("click", my_func, true);
  • 一些通常返回各種DOM對象的代碼,在Greasemonkey環境中,返回包裝在XPCNativeWrapper中的那些對象。 這是出於安全原因。

    有些方法和屬性是“透明的”,您可以在包裝的對象上調用它們,但有些則不能。 閱讀提到的文章,了解如何避免這種情況; 您還可以使用(通常不建議這樣做,但是用於測試等)wrappedJSObject屬性。 是的,當obj.something / obj.something()在Greasemonkey中不起作用時,請嘗試obj.wrappedJSObject.something / obj.wrappedJSObject.something()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM