标题总结了我遇到的奇怪问题。我声明一个全局变量,执行一个setInterval函数来修改该变量并在间隔的持续时间内取消,该变量看起来是否会被修改。
更清楚的是,这个简单的背景文件代码说明了这种情况:
var TabId=0;
var target= "https://google.com";
function start() {
chrome.tabs.create({url: target}, function(tab) {TabId=tab.id;});
setInterval(Repeat, 30*1000); //repeat every 30 seconds
}
function Repeat(){
chrome.tabs.remove(TabId);
chrome.tabs.create({url: target}, function(tab) {TabId=tab.id;});
}
chrome.browserAction.onClicked.addListener(start);
对于"短"我很惊讶如10秒的间隔,扩展工作正常,但30秒,例如,它失败。在指定的时间过后它什么都不做,如果你在控制台中检查TabId的值,它仍然是0.它看起来好像是代码行
TabId=tab.id;
从未执行过,这是不可能的,因为选项卡已经创建了,对吗?
但是还有更多的东西:如果你甚至在触发onClicked事件之前打开后台页面的控制台,它似乎按预期运行正常!
有人能帮我理解这里发生了什么吗? 起初我认为这可能与变量范围有关,但它没有意义,因为它的间隔时间更短,效果很好。
问候。
答案 0 :(得分:0)
我的坏。
在我的清单文件中,我将“持久性”设置为 false 。通过此属性,您可以使用事件页面而不是背景页面。
事件页面仅在需要时加载。当事件页面没有主动执行某些操作时,它将被卸载,释放内存和其他系统资源。
因此,等待间隔完成一段时间后,TabId将被删除。 这让我发疯了,但是今天早上我醒来时提示解决方案。