gpt4 book ai didi

google-chrome - chrome.tabs.onUpdated.addListener() 被调用两次

转载 作者:行者123 更新时间:2023-12-03 00:37:00 30 4
gpt4 key购买 nike

我正在编写一个 Chrome 扩展,在某些网站中 chrome.tabs.onUpdated.addListener() 被调用两次。

大多数情况下,如果我点击链接,而不是我自己输入网址,就会发生这种情况。

根据我在网络上发现的信息以及 StackOverflow 上提出的许多问题,chrome 上存在一个错误,但几年前已修复。

有些人声称如果页面中有多个 iframe,就会发生这种情况,但就我而言,我的页面中没有 iframe。

这是我的代码:

 var storage = chrome.storage.local;

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
if (changeInfo.status == 'complete' && tab.status == 'complete' && tab.url != undefined) {
storage.get('URLs', function(URLs){
for (var item in URLs)
{
if (tab.url == item)
{
return;
}
else
{
//alert ("tab load complete");
storage.set({URLs: [tab.url]});
chrome.tabs.executeScript(tab.id, {
"file": "flashblocker.js"
}, function () { // Execute your code
console.log("Script Executed .. "); // Notification on Completion
});
}
}
});
}
});

如何让它只运行一次?

谢谢。

最佳答案

使用变量并在监听器内添加检查,以在执行警报之前检查该变量的值。你可以这样做:

var tabUpdated = false;
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
if (changeInfo.status == 'complete' && tab.status == 'complete' && tab.url != undefined) {
if (!tabUpdated) {
alert("tab load complete");
tabUpdated = true;
}
}
});

但是,如果内容脚本实际上加载两次,则此操作将会失败,因为 tabUpdated 变量将再次初始化为 false。在这种情况下,您可以使用 chrome 的存储 API 并存储已调用监听器的 URL。只需为此添加一个检查,如果 URL 存在于存储中,则不会调用警报,否则将调用。然后,您可以在浏览器启动或关闭时清除存储。

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
if (changeInfo.status == 'complete' && tab.status == 'complete' && tab.url != undefined) {
chrome.local.storage.get('URLs', function(URL's) {
// Iterate through this list here and match with tab.url, if the match is found, just return.
if (url is there in list) {return;}
else {
alert("tab load complete");
chrome.local.set({URLs: [tab.url]});
}
});
}
});

这只是一个如何实现它的示例。根据您的需要进行调整。

我希望这会有所帮助。

关于google-chrome - chrome.tabs.onUpdated.addListener() 被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34115837/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com