Javascript:使用 tampermonkey 将选择复制到剪贴板

问题描述 投票:0回答:3

此代码(由此页面提供)在纯 html 文件中使用时效果很好。特别是,它成功地将选定的文本复制到剪贴板。

function copySelectionText(){
  var copysuccess
  try {
    copysuccess = document.execCommand("copy")
  } catch(e) {
    console.log(e)
    copysuccess = false
  }
  return copysuccess
}
document.addEventListener('mouseup', function(){
  var copysuccess = copySelectionText()
}, false)

但是,当在其中的 tampermonkey 自定义脚本中使用时,我无法使其工作:

(function() {
    // 'use strict';
    // Your code here...

})();

免责声明:

  • 这是我第一次写tampermonkey脚本。
  • 我打算在我朋友拥有的特定网站上使用它,而不是在任何其他网站上滥用。
  • 使用 vanilla javascript(无库)将是一个主要优点。

问题:如何让此函数在 tampermonkey 自定义脚本中工作?

我按照 tampermonkey/greasemonkey 文档中的说明进行操作。

控制台显示“复制成功未定义”。

console.log(e)
也不会产生任何结果。

javascript clipboard greasemonkey tampermonkey userscripts
3个回答
0
投票

我相信您可能未通过严格检查。由于您使用的是

'use strict'
,因此您的 JavaScript 需要兼容。有关严格模式的更多信息,请参阅:MDN:严格模式

此外,除了存储

copy
命令的成功之外,您没有执行任何操作。您既不记录任何内容,也不发出任何警报。此外,要获取实际的剪贴板文本,您需要访问剪贴板对象。

以下脚本适用于 Violentmonkey。它使用新的异步剪贴板 API。

// ==UserScript==
// @name         Copy Selected Text
// @namespace    Stack Overflow
// @match        https://stackoverflow.com/questions/75939654/*
// @grant        none
// @version      1.0.0
// @author       Mr. Polywhirl
// @description  Userscript for copying text on a website.
// ==/UserScript==
(function() {
  // 'use strict';
  function copySelectionText() {
    let copysuccess;
    try {
      copysuccess = document.execCommand("copy");
    } catch(e) {
      console.log(e);
      copysuccess = false;
    }
    return copysuccess;
  }

  async function onMouseUp() {
    const copysuccess = copySelectionText();
    if (copysuccess) {
      // See: https://stackoverflow.com/a/49886460/1762224
      const clipboardText = await navigator.clipboard.readText();
      alert(clipboardText);
    }
  }

  document.addEventListener('mouseup', onMouseUp, false);
})();

0
投票

我觉得不触发的原因是脚本没有加载完页面就触发了,所以最简单的方法就是添加一个setTimeOut()函数,延迟几秒再触发


0
投票

很简单:看看 https://www.tampermonkey.net/documentation.php -> GM_setClipboard

© www.soinside.com 2019 - 2024. All rights reserved.