P. *_*Luo 5 javascript tabs google-chrome sendmessage google-chrome-extension
我实现这个的方式有错误吗?我正在打开一个新选项卡,然后向该选项卡发送消息,但是所有其他具有侦听器的选项卡也会收到该消息。
在 background.js 中:
chrome.tabs.create({url:chrome.extension.getURL("placement.html")},function(tab){
chrome.tabs.sendMessage(tab.id, {
"name":"name",
"payload":payload
});
});
Run Code Online (Sandbox Code Playgroud)
在placement.js 中(在加载placement.html 时运行):
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.name == "name") {
payload = request.payload;
}
});
Run Code Online (Sandbox Code Playgroud)
我看到每当创建一个新选项卡时,有效负载都会发送到所有具有此 onMessage 侦听器的选项卡。这段代码相对较旧,所以我不确定最近是否有什么变化影响了 chrome.tabs.sendMessage 解释“tab.id”的方式。任何帮助表示赞赏!
我同意@wOxxOm,这是 Chrome 新版本的一个错误......它似乎chrome.tabs.connect
不尊重标签 ID 参数。
我通过将所需选项卡的 URL 发送到内容脚本并确保 URL 匹配来解决这个问题。
从弹出窗口:
chrome.tabs.query({currentWindow: true,active: true}, function(tabs){
port = chrome.tabs.connect(tabs[0].id,{name: "channelName"});
port.postMessage({url:tabs[0].url});
});
Run Code Online (Sandbox Code Playgroud)
从内容脚本:
chrome.runtime.onConnect.addListener(function(port) {
if(port.name == "channelName"){
port.onMessage.addListener(function(response) {
if(response.url == window.location.href){
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
在与 Google 的开发人员联系后,我在这里打开了一个问题。
归档时间: |
|
查看次数: |
6524 次 |
最近记录: |