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



这段代码(由本页提供)在普通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...
})();

免责声明:

  • 这是我第一次编写篡改猴脚本。
  • 我打算在我朋友拥有的一个特定网站上使用这个,而不是滥用任何其他网站。
  • 使用普通javascript(没有库)将是主要加分项。

问题:我如何使这个函数工作在一个篡改猴自定义脚本?

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

控制台显示"copysuccess未定义"。console.log(e)也不生产。

我认为你可能没有通过严格检查。由于您使用的是'use strict',因此您的JavaScript需要兼容。有关严格模式的详细信息,请参见:MDN: strict mode。

此外,除了存储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);
})();

我认为它不触发的原因是脚本没有完成加载页面被触发,所以最简单的方法是添加一个setTimeOut()函数在触发

之前延迟它几秒钟

相关内容

  • 没有找到相关文章

最新更新