在应用程序中,所有页面均使用内容脚本,并在完整加载的页面上将消息发送到活动页面,但有时会有很多脚本调用,而我有2次或更多:
代码实现:
chrome.tabs.onCreated.addListener(function (tabs) {
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
if(changeInfo.status === "complete") {
let tabid = tab.id;
console.log("Site is valid: url -> " + tab.url)
chrome.tabs.executeScript(tab.id, {
file: '/injections/mobile.bet365.com.js',
});
console.log(tab);
setTimeout(function () {
console.log("timeout was set")
chrome.tabs.query({}, function (tabs) {
let countOpenedTabsFrom = tabs.length;
let opener = 1;
// на целевой вкладке
chrome.tabs.sendMessage(tabid, {
message: "start_app",
opener: opener,
queuenumber: countOpenedTabsFrom
}, function (response) {
console.log(response);
});
});
}, 500);
}
执行的脚本也有很多查询。 为什么会这样?
答案 0 :(得分:0)
每次onCreated
事件触发时,您都在添加一个 new onUpdated
侦听器。
此后,onUpdated
事件触发时,将执行所有 ,导致您所看到的行为。
完成后,您需要注销处理程序,或者只注册一次处理程序。有关实现方法的想法,请参见chrome.events
docs(描述了其他API中所有事件对象的共同点)。
请注意,chrome.tabs.onCreated
侦听器中的代码根本不使用tabs
参数,因此不清楚您为什么甚至需要侦听onCreated
。