弹出脚本和内容脚本无法通信?
我的问题是我似乎无法得到消息chrome.extension.sendMessage("on");
从我的popup.js转移到我的content.js。
popup.js中的代码:
function click(e) { if ( e.target.id == "green"){ chrome.extension.sendMessage("start"); console.info("oN"); return; } if ( e.target.id == "red"){ chrome.extension.sendMessage("stop"); console.info("oFF"); return; } }
当我向代码添加一个监听器时,popup.js非常好地接收消息。 但我的content.js似乎无法得到它。
来自content.js的代码:
chrome.extension.onMessage.addListener( function(request, sender, sendResponse) { console.info("ok"); } );
表现:
"content_scripts": [ { "matches": [""], "js": ["content.js"], "run_at": "document_end" } ],
任何帮助是极大的赞赏。
chrome.extension.sendMessage
是一个非规范名称。
旧的,已弃用的API是chrome.extension.sendRequest
,新API是chrome.runtime.sendMessage
,事件同样是chrome.runtime.onMessage
。
也就是说,您的问题是尝试向内容脚本发送消息。 chrome.runtime.sendMessage
将消息发送到扩展程序自己的页面; 内容脚本不被认为是这样的。
要将消息发送到内容脚本,您必须使用tab的tabId
调用chrome.tabs.sendMessage
API 。
假设您想要当前可见选项卡:
function click(e) { if ( e.target.id == "green"){ chrome.tabs.query({active:true, currentWindow: true}, function(tabs){ chrome.tabs.sendMessage(tabs[0].id, "start"); }); console.info("oN"); return; } /* ... */ }
如果您想要所有选项卡,只需通过{}
query
并迭代tabs
。
最后,注意内容脚本注入时间怪癖 。