Javascript 如何在后台运行Chrome扩展的网页上捕获复制事件?

Javascript 如何在后台运行Chrome扩展的网页上捕获复制事件?,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我花了好几个小时试图找到一个Chrome扩展的解决方案,以便能够在常规网站上收听复制活动。到目前为止,最接近解决方案的是我创建此事件脚本时: function onCopy(e) { console.log("onCopy works"); //it doesn't :( chrome.runtime.sendMessage({event: "copy"}); } chrome.runtime.sendMessage('copy', onCopy, true); oncop

我花了好几个小时试图找到一个Chrome扩展的解决方案,以便能够在常规网站上收听复制活动。到目前为止,最接近解决方案的是我创建此事件脚本时:

function onCopy(e) {
    console.log("onCopy works"); //it doesn't :(
    chrome.runtime.sendMessage({event: "copy"});
}

chrome.runtime.sendMessage('copy', onCopy, true); 
oncopy.js上的函数应该向popup.js中的函数发送一条消息:

chrome.extension.onMessage.addListener(
    function(request, sender, sendResponse) {
        if (request.event == "copy") {
            console.log("copy detected");
        }
        sendResponse({});
    }); 
不幸的是,由console.log创建的消息(“onCopy works”)是唯一有效的。如果有人能澄清我做错了什么,没有做什么,我将不胜感激。这里的目标是每次用户将副本复制为事件时从剪贴板获取数据。以下是my manifest.json的相关部分,以防有所帮助:

"background": {
    "scripts": ["oncopy.js"],
    "persistent": false
}

如果您的消息处理程序位于
popup.js
中,并且它实际上是
popup.html
中的一个脚本,那么它只有在打开popup时才能工作。
即使它位于后台页面,也不会显示警报。您应该使用
console.log
并在DevTools中打开后台页面以查看结果。
您还需要在内容脚本和弹出/背景页面之间发送和接收消息:

//在后台页面或弹出页面中(仅当弹出窗口打开时有效)
chrome.runtime.onMessage.addListener((请求、发送方、发送响应)=>{
console.log(“接收:+请求”);
sendResponse(“消息已被后台页面处理”);
});
//在内容脚本注入到网站页面
document.addEventListener(“副本”,()=>
chrome.runtime.sendMessage(
{事件:“单击”},

msg=>console.log(msg))
Background页面与网页无关,无法侦听DOM事件。你需要一个内容脚本。请务必阅读文档中的扩展架构文章。@wOxxOm谢谢,我忘了读它(这是我的第一个Chrome扩展),它真的解释了很多。谢谢你的回答,我几乎成功了,我更新了问题的详细信息。你能告诉我什么在onCopy函数上不起作用吗?@xis-我添加了一个例子,说明你如何处理它。非常感谢你花这么多时间来帮助我们!