【问题标题】:GM_setClipboard (and other GM functions) gives an error in a Firefox but not Chrome/Tampermonkey?GM_setClipboard(和其他 GM 函数)在 Firefox 中给出错误,但在 Chrome/Tampermonkey 中没有?
【发布时间】:2016-06-05 05:30:19
【问题描述】:

我正在使用 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
    }
});

【问题讨论】:

  • 是否有任何错误信息或类似的东西?实际和预期的行为是什么?
  • 是的,对不起,我刚刚想出了如何在控制台中从 Greasemonkey 检索错误消息,错误是“ReferenceError: GM_setClipboard is not defined”。预期的行为是,当我按下 Shift+* 时,它将复制所选链接的文本。

标签: javascript jquery greasemonkey tampermonkey


【解决方案1】:

Greasemonkey requires explicit @grant statements 使用GM_ 函数。而 Tampermonkey 仍然会进行一些自动检测(一个潜在的安全漏洞)。

所以:

  1. 您需要在metadata block 中指定// @grant GM_setClipboard

  2. 但是,这会重新打开沙箱(一件好事),因此您还需要确保您拥有 @required 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
    }
} );

【讨论】:

  • 现在是GM.setClipboard. 不是_)。 @grant 仍然是必需的,也必须更正。使用 Grease Monkey 4.9 在 Firefox 68.3(从 2019 年 12 月起)中测试。
【解决方案2】:

https://clipboardjs.com/ 是个不错的选择。

一个非常常见的用例是从另一个元素复制内容。您可以通过在触发器元素中添加 data-clipboard-target 属性来做到这一点。

【讨论】:

    猜你喜欢
    • 2014-06-05
    • 2015-02-04
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多