Google chrome Chrome extension onConnect listener从不同选项卡多次触发
我正在创建一个扩展名,该扩展名使用.js文件的这种结构: A页(内容脚本)->B页(背景脚本)->C页(内容脚本) 在A页上,有一些链接,单击后会向B发送消息。B的想法是打开一个新选项卡并加载C页;当C完全加载时,它将向B发送一条消息,B将向C发送一些数据以填写表单 这一切都是可行的,但在输入一些日志后,我意识到如果从A页单击多个链接,B中的侦听器实际上会触发两次。下面是代码的样子: A页:Google chrome Chrome extension onConnect listener从不同选项卡多次触发,google-chrome,google-chrome-extension,Google Chrome,Google Chrome Extension,我正在创建一个扩展名,该扩展名使用.js文件的这种结构: A页(内容脚本)->B页(背景脚本)->C页(内容脚本) 在A页上,有一些链接,单击后会向B发送消息。B的想法是打开一个新选项卡并加载C页;当C完全加载时,它将向B发送一条消息,B将向C发送一些数据以填写表单 这一切都是可行的,但在输入一些日志后,我意识到如果从A页单击多个链接,B中的侦听器实际上会触发两次。下面是代码的样子: A页: $(document).ready(function () { $('.click-test').c
$(document).ready(function () {
$('.click-test').click(function() {
chrome.runtime.sendMessage({formData: here}, function(response) {
});
});
});
B:
C页:
$(document).ready(function() {
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
// Fill in form with request data
});
var port = chrome.runtime.connect({name: "formStatus"});
port.postMessage({status: "formReady"});
});
当点击页面A上的第一个链接时,一切正常。单击第二个链接时,B中的onConnect侦听器将触发两次:首先使用与第一次单击相同的数据,然后使用与第二次单击对应的正确数据
有没有办法在B的侦听器启动一次后立即禁用它?或者,我只是把这个代码弄得太复杂了吗?Rob W.在注释中是正确的-删除侦听器就像他在addListener部分中所做的那样。谢谢 您的消息传递逻辑有缺陷。我没有时间尝试修复您的完整逻辑,但是获取多个onConnect调用的原因是您正在为每个onMessage调用注册一个新的事件侦听器。要解决此问题,请在收到连接后,使用
chrome.runtime.onConnect.addListener(函数侦听器(端口){chrome.runtime.onConnect.removeListener(侦听器);
,注销onConnect消息侦听器。
$(document).ready(function() {
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
// Fill in form with request data
});
var port = chrome.runtime.connect({name: "formStatus"});
port.postMessage({status: "formReady"});
});