问题描述
对于javascript和chrome扩展程序来说是非常新的东西,对于编程来说也很新。
我的manifest.json:
{
"name": "GetUp aSec","version": "1.0","description": "Be healthy,get up!","manifest_version": 2,"content_scripts": [
{
"matches": [
"<all_urls>"
],"js": [
"content.js"
]
}
],"browser_action": {
"default_popup": "popup.html","default_icon": "icon.png"
},"background": {
"scripts": [
"background.js"
]
}
}
我的background.js是我在网上找到的一个功能,该功能被保证比正常的睡眠功能运行更流畅 然后每52分钟发送一条消息。
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve,ms));
}
while (true) {
sleep(52000 * 60).then(() => {
chrome.tabs.query({ currentwindow: true,active: true },function (tabs) {
chrome.tabs.sendMessage(tabs[0].id,'its been 52 minutes! you should take a break.')
})
});
}
我的content.js只是一个希望可以提醒消息的侦听器。
chrome.runtime.onMessage.addListener(function (request) {
alert(request)
})
当我将其添加到chrome中时,它不会给我任何错误,但也不会执行任何操作。有帮助吗?
解决方法
打开Chrome的任务管理器,您会看到扩展程序正在吞噬100%的CPU,陷入无尽的while
循环中。
切换到async / await语法,以便实际暂停循环的主体:
(async () => {
while (true) {
await sleep(52 * 60e3);
chrome.tabs.query({currentWindow: true,active: true},tabs => {
chrome.tabs.sendMessage(tabs[0].id,"It's been 52 minutes! You should take a break.");
});
}
})();
更好的是,使后台脚本仅按需加载("persistent": false),并使用chrome.alarms API,而不是带有setTimeout的无限循环。