如何让 Chrome 分机休眠一段时间并在端口上发送 post 消息
How to make a Chrome Extension sleep for a time and post message on port
在我的扩展中,我希望扩展等待一段时间,因为它改变了内容中的某些东西并且它不能很快。
我正在使用睡眠功能,它只是一个在时间到了时会中断的循环,但它会使我的计算机非常慢。
我使用了 setTimeout 方法,但扩展名显示 "port is not defined",因为当 setTimeout 方法为 运行 时代码继续,但我认为端口停止连接。
那么,您知道如何在不损坏计算机的情况下让代码休眠吗?
睡眠功能
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
for(var j=0;j<10000000;j++)
if ((new Date().getTime() - start) > milliseconds){
return;
}
}
}
港口代码
chrome.runtime.onConnect.addListener(function(port) {
console.assert(port.name == "knockknock");
port.onMessage.addListener(function(msg) {
console.log("mesajjj");
if (msg.joke == "Baslat"){
setTimeout(firstwaiting, 5000);
console.log("wait");
}
});
});
function firstwaiting(){
port.postMessage({question: "waited"});
console.log("waited, now goes on");
}
我使用第二种方法和 setTimeout 方法得到 "port is not defined at firstwaiting" 错误。
连接没有问题,它与睡眠功能一起使用,但我需要一个更好的方法。
我希望在不费力的情况下有延迟。我试了好几天,但我什至在网上也找不到方法。提前致谢。
您的 sleep
函数实际上并没有 sleep/wait,它只是阻塞了页面的主线程。在 JavaScript 中,唯一正确的睡眠方式是 setTimeout/setInterval 和类似的内置函数。
解决方案:不要使用 sleep() 并简单地将 port
作为参数传递给您的计时器回调。
chrome.runtime.onConnect.addListener(function (port) {
port.onMessage.addListener(function (msg) {
if (msg.joke == 'Baslat') {
setTimeout(firstwaiting, 5000, port);
}
});
});
function firstwaiting(port) {
port.postMessage({question: 'waited'});
}
在我的扩展中,我希望扩展等待一段时间,因为它改变了内容中的某些东西并且它不能很快。 我正在使用睡眠功能,它只是一个在时间到了时会中断的循环,但它会使我的计算机非常慢。 我使用了 setTimeout 方法,但扩展名显示 "port is not defined",因为当 setTimeout 方法为 运行 时代码继续,但我认为端口停止连接。 那么,您知道如何在不损坏计算机的情况下让代码休眠吗?
睡眠功能
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
for(var j=0;j<10000000;j++)
if ((new Date().getTime() - start) > milliseconds){
return;
}
}
}
港口代码
chrome.runtime.onConnect.addListener(function(port) {
console.assert(port.name == "knockknock");
port.onMessage.addListener(function(msg) {
console.log("mesajjj");
if (msg.joke == "Baslat"){
setTimeout(firstwaiting, 5000);
console.log("wait");
}
});
});
function firstwaiting(){
port.postMessage({question: "waited"});
console.log("waited, now goes on");
}
我使用第二种方法和 setTimeout 方法得到 "port is not defined at firstwaiting" 错误。 连接没有问题,它与睡眠功能一起使用,但我需要一个更好的方法。
我希望在不费力的情况下有延迟。我试了好几天,但我什至在网上也找不到方法。提前致谢。
您的 sleep
函数实际上并没有 sleep/wait,它只是阻塞了页面的主线程。在 JavaScript 中,唯一正确的睡眠方式是 setTimeout/setInterval 和类似的内置函数。
解决方案:不要使用 sleep() 并简单地将 port
作为参数传递给您的计时器回调。
chrome.runtime.onConnect.addListener(function (port) {
port.onMessage.addListener(function (msg) {
if (msg.joke == 'Baslat') {
setTimeout(firstwaiting, 5000, port);
}
});
});
function firstwaiting(port) {
port.postMessage({question: 'waited'});
}