[英]Chrome extension setTimeout not working properly
我在这里的第一篇文章=]。
我正在构建一个chrome扩展,我正在递归使用setTimeout。 我注意到,如果我将它设置为最多13秒,它可以工作,但如果我将它设置为14秒+它将无法正常工作。
这是我的background.js上的一个例子
function start() {
var timeout = setTimeout( function() { start(); }, 1000*15);
alert('test');
}
chrome.webNavigation.onCompleted.addListener(function(o) {
start();
}, {
url: [
{urlContains: 'http://www.example.com/in.php'},
{urlContains: 'http://www.example.com/out.php'}
]
}
);
如果将该超时减少到1000 * 13,则可以正常工作。
这是我的manifest.json
{
"name": "Extension",
"version": "0.0.7",
"manifest_version": 2,
"description": "Keeps proxy session alive",
"homepage_url": "http://www.example.com",
"icons": {
"16": "icons/icon16-on.png",
"48": "icons/icon48-on.png",
"128": "icons/icon128-on.png"
},
"default_locale": "en",
"background": {
"scripts": [
"src/bg/background.js"
],
"persistent": false
},
"browser_action": {
"default_icon": "icons/icon19.png",
"default_title": "Example - Off",
"default_popup": ""
},
"permissions": [
"webNavigation",
"*://*/*",
"https://*/*"
]
}
什么可能导致这种奇怪的想法? 我在开发者模式BTW上测试这个。
提前致谢!
编辑
代码修正:
的manifest.json
我在权限中添加了“警报”
background.js
添加此事件以收听alarms.create:
chrome.alarms.onAlarm.addListener(function(alarm){
start();
});
用下面的行替换了setTimeout函数
chrome.alarms.create("Start", {periodInMinutes:1});
希望这可以帮助!
我怀疑问题可能是在一段时间不活动后自动暂停事件页面。 在我的机器上, onSuspend
似乎在~10秒后调用。
https://developer.chrome.com/extensions/event_pages#lifetime指出
一旦事件页面空闲了很短的时间(几秒钟),就会调度runtime.onSuspend事件。 在强行卸载之前,事件页面还有几秒钟来处理此事件。
所以,在页面实际卸载之前,这可能会让你在13秒左右得到更多的东西(在onSuspend中给你一些清理时间,我估计)。 然后卸载您的页面并从那里启动代码不再运行。
https://developer.chrome.com/extensions/event_pages#transition表示使用事件页面的警报api而不是setTimeout
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.