GM_setClipboard(以及其他GM功能)在Firefox中出错但不在Chrome/Tampermonkey中出错?

DjH*_*DjH 6 javascript jquery greasemonkey tampermonkey

我正在使用Firefox并尝试创建一个函数,当我按Shift+ 时,它将复制链接的文本*(Numpad).

该代码通常在Chrome Tampermonkey中运行,但由于某种原因,它在Firefox中无效.
控制台中报告以下错误:

"ReferenceError:未定义GM_setClipboard"

这是我的代码:

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
    }
});
Run Code Online (Sandbox Code Playgroud)

Bro*_*ams 9

Greasemonkey需要显式@grant语句才能使用GM_函数.而Tampermonkey仍然会进行一些自动检测(潜在的安全漏洞).

所以:

  1. 您需要// @grant GM_setClipboard元数据块中指定.

  2. 但是,这会重新打开沙箱(这是一件好事),所以你还需要确保你有@requirejQuery.

这个脚本可以在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
    }
} );
Run Code Online (Sandbox Code Playgroud)

  • 现在是“GM.setClipboard”(“.”而不是“_”)。`@grant` 仍然是必需的,并且也必须更正。在 Firefox 68.3(自 2019 年 12 月起)和 Grease Monkey 4.9 中进行了测试。 (3认同)