2016-02-23 45 views
3

我在Firefox工作,並試圖創建一個功能,當我按Shift + *(Numpad)將複製鏈接的文本。GM_setClipboard(和其他GM函數)在Firefox中給出錯誤,但不是Chrome/Tampermonkey?

該代碼通常適用於Chrome Tampermonkey,但由於某些原因,它在Firefox中無所作爲。報道在控制檯
以下錯誤:

"ReferenceError: GM_setClipboard is not defined"

這是我的代碼:

document.addEventListener("keydown", function(i) { 
    var selectLink = $('a').eq(8); // The link by index 
    var targetLink = selectLink.text(); // The link text 

    if (i.keyCode === 106 && i.shiftKey) // Shift+Num* 
    { 
     GM_setClipboard(targetLink); // Copy to clipboard 
    } 
}); 
+0

是否有任何錯誤消息或類似的東西?什麼是實際和預期的行爲? –

+0

是的,抱歉,我只是想出瞭如何從控制檯中的Greasemonkey檢索錯誤消息,錯誤是「ReferenceError:GM_setClipboard未定義」。預期的行爲是,當我按Shift + *時,它將複製所選鏈接的文本。 – DjH

回答

3

Greasemonkey requires explicit @grant statements使用GM_功能。而Tampermonkey仍然會進行一些自動檢測(一個潛在的安全漏洞)。

所以:

  1. 你需要在你的metadata block指定// @grant GM_setClipboard

  2. 但是,這會重新開啓沙箱(一件好事),因此您還需要確保您已經使用jQuery。

這個腳本會在兩者的Greasemonkey和Tampermonkey工作:

// ==UserScript== 
// @name  _YOUR_SCRIPT_NAME 
// @match http://YOUR_SERVER.COM/YOUR_PATH/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js 
// @grant GM_setClipboard 
// ==/UserScript== 

document.addEventListener ("keydown", function (i) { 
    var selectLink = $('a').eq (8); // The link by index 
    var targetLink = selectLink.text().trim(); // The link text 

    if (i.keyCode === 106 && i.shiftKey) // Shift+Num* 
    { 
     GM_setClipboard (targetLink); // Copy to clipboard 
    } 
}); 
0

https://clipboardjs.com/是一個不錯的選擇。

一個很常見的用例是複製另一個元素的內容。您可以在觸發器元素中添加數據剪貼板目標屬性。

enter image description here

相關問題