回答

5

要做到這一點最簡單的方法:

  1. 通過URL decoder運行書籤代碼。使得javascript:alert%20('Hi%20Boss!')%3B,例如,成爲:
    javascript:alert ('Hi Boss!');

  2. 地帶的領先javascript:關閉。結果:alert ('Hi Boss!');

  3. 將此代碼添加到您的Greasemonkey文件的末尾。例如,創建一個名爲文件,
    你好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. 打開你好World.user.js與Firefox(按CtrlO)。 Greasemonkey將提示安裝腳本。

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

  6. 更新:爲了保證最大的兼容性,使用由Greasemonkey和Tampermonkey的更高版本增加了@grant none指令。


重要:

+0

這很好,但是這會在每一頁上自動運行。我所有的書籤都是我只想激活的東西(比如在插件板上書籤或者在Wayback Machine上查找)。你會如何讓它只在我想要的時候執行? –

+0

@NickS,這就是[@ include','@ exclude'和'@ match'指令](https://tampermonkey.net/documentation.php#_include)的用途。 –

+0

對不起,讓我澄清一下:我的意思是我想在一個頁面上,想「嘿,我想在Wayback Machine上查看這個」,點擊* something *,然後執行我的腳本(用Wayback打開一個新標籤機器搜索當前的網址)。 我點擊了什麼?腳本如何知道何時打開選項卡? –

1

這裏是一個很好的文章,以avoid common pitfalls因爲「正常」的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()

相關問題