![](/img/trans.png)
[英]Is there a way to automatically convert a Greasemonkey script into a bookmarklet?
[英]How to convert a bookmarklet into a Greasemonkey userscript?
有一個簡單的方法可以做到這一點。 由於運行方式的差異,是否需要更改任何內容?
最簡單的方法是:
通過URL解碼器運行小書簽代碼。 因此,例如javascript:alert%20('Hi%20Boss!')%3B
變為:
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!');
使用Firefox( Ctrl O )打開Hello World.user.js 。 Greasemonkey將提示您安裝腳本。
現在,bookmarklet代碼將自動在您使用@include
和@exclude
指令指定的任何頁面上運行。
更新:為了確保最大的兼容性,請使用在更高版本的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.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.