做一个chrome插件遇到一个bug,
向页面注入了一个content_script叫content.js和一个iframe,这个iframe里面script引用了一个iframe.js
现在有这样三段代码:
1 background.js
//主要用于iframe.js与content.js通信
chrome.runtime.onMessage.addListener(function (request, sender, cb) {
chrome.tabs.sendMessage(sender.tab.id, request, cb);
});
2 content.js
SelectorGadget.prototype.addCaptureData = function (capData) {
// -------这里打印 “发送”
console.log("发送:"+capData);
chrome.runtime.sendMessage({type: "addCaptureData", data: capData});
};
3 iframe.js
chrome.runtime.onMessage.addListener(function (request, sender, cb) {
if (request.type === "setCaptureSelectorText") {
VM.pageEleCssSelector = request.data;
}
else if (request.type === "setPageSelectorText") {
VM.pageEleCssSelector = request.data;
}
else if (request.type === "addCaptureData") {
// -----这里打印 “收到”
console.log("收到:"+request.data);
VM.capturedData=VM.capturedData.concat(request.data);
}
else if (request.type === "clearAllCapture") {
VM.capturedData = [];
}
})
然后bug来了,在控制台打印了一次发送,却有两次收到,
我可以肯定不是重复执行了事件,但不知道为什么明明只发送了一次却收到了两次,是不是因为background.js做了中转导致的?
content.js发送一次,被iframe接收到, background.js发送一次,又被iframe接收到。 所以打印两次了。
可以看下官方文档:https://developer.chrome.com/...
貌似每一个frame发送的message都会被onMessage监听到。