我正在尝试将数据从弹出窗口传递到内容脚本,但我没有运气.我让它以相反的方式工作(内容 - >弹出窗口).我想要做的就是将文本输入到弹出窗口中的输入中,然后单击一个提交按钮,该按钮会将该文本插入到网页的dom中.
这就是我所拥有的:
popup.html
chrome.extension.sendRequest({action:'start'}, function(response) {
console.log('Start action sent');
});
Run Code Online (Sandbox Code Playgroud)
contentscript.js
function startExtension() { console.log('Starting Extension'); }
function stopExtension() { console.log('Stopping Extension'); }
function onRequest(request, sender, sendResponse) {
if (request.action == 'start')
startExtension()
else if (request.action == 'stop')
stopExtension()
sendResponse({});
}
chrome.extension.onRequest.addListener(onRequest);
Run Code Online (Sandbox Code Playgroud) 我一直在研究与页面模块进行通信的上下文菜单,并遇到问题.
只要我不刷新页面,我就可以通过右键单击发送到页面/选项卡的通信.刷新页面时,将创建一个新工作程序,并且上下文菜单无法与工作程序通信.
我现在有两个相同的工人,但就像旧工人已过期一样.这意味着onMessage中的这个循环:不起作用,因为它拾取了第一个worker.
for (index = 0; index < workers.length; index += 1) {
if (workers[index].tab.index === tabs.activeTab.index) {
workers[index].port.emit("rightClick", string, ss.storage.product);
}
}
Run Code Online (Sandbox Code Playgroud)
我一直在寻找删除旧工人刷新,但似乎没有选择这样做.我从根本上错过了一些关于工人处理的事情吗?
我收到的错误是:错误:页面当前是隐藏的,在再次可见之前无法再使用.
这与以下事实是一致的:就工人而言,我现在正在查看同一选项卡中的新页面.我认为worker.on('detach',function(){})应该处理这个问题但似乎这只是关闭选项卡.
任何意见,将不胜感激.
稍微休息后添加 OK我决定使用其他地方推荐的detachWorker功能进行分离.我把它放在我的pageMod对象的顶部,如下所示
// Clean up duplicate worker
for (index in workers) {
if(workers[index].url === worker.url && workers[index].tab.index === worker.tab.index) {
detachWorker(workers[index], workers);
}
}
Run Code Online (Sandbox Code Playgroud)
这解决了问题(暂时),虽然我不认为这是正确的方法.解决方案的任何进展:).