此代码(由此页面提供)在纯 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 自定义脚本中工作?
我按照 tampermonkey/greasemonkey 文档中的说明进行操作。
控制台显示“复制成功未定义”。
console.log(e)
也不会产生任何结果。
我相信您可能未通过严格检查。由于您使用的是
'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);
})();
我觉得不触发的原因是脚本没有加载完页面就触发了,所以最简单的方法就是添加一个setTimeOut()函数,延迟几秒再触发
很简单:看看 https://www.tampermonkey.net/documentation.php -> GM_setClipboard