这段代码(由本页提供)在普通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()函数在触发
之前延迟它几秒钟