Javascript 如何使Chrome扩展睡眠一段时间并在端口上发布消息

Javascript 如何使Chrome扩展睡眠一段时间并在端口上发布消息,javascript,google-chrome-extension,settimeout,sleep,Javascript,Google Chrome Extension,Settimeout,Sleep,在我的扩展中,我希望扩展等待一段时间,因为它改变了内容中的某些内容,并且不能太快。 我正在使用一个睡眠功能,它只是一个循环,当时间到来时会中断,但它使我的计算机非常慢。 我使用了setTimeout方法,但扩展名说“端口未定义”,因为setTimeout方法运行时代码会继续,但我认为端口会停止连接。 那么,你知道我如何在不破坏电脑的情况下让代码休眠吗 睡眠功能 function sleep(milliseconds) { var start = new Date().getTime();

在我的扩展中,我希望扩展等待一段时间,因为它改变了内容中的某些内容,并且不能太快。 我正在使用一个睡眠功能,它只是一个循环,当时间到来时会中断,但它使我的计算机非常慢。 我使用了setTimeout方法,但扩展名说“端口未定义”,因为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;
    }
  }
}
我使用setTimeout方法的第二种方法得到“端口在firstwaiting时未定义”错误。 连接没有问题,它与睡眠功能一起工作,但我需要一个更好的方法


我希望不用花太多的力气就能耽搁一下。我已经试了好几天了,但是我甚至在网上也找不到办法。提前感谢。

您的
sleep
函数实际上并不是sleep/wait,它只是阻塞了页面的主线程。在JavaScript中,唯一正确的睡眠方式是setTimeout/setInterval和类似的内置函数

解决方案:不要使用sleep(),只需将
端口作为参数传递给计时器回调

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'});
}

你是我的英雄,非常感谢!!我试了很长时间:)顺便说一句,我没有足够的声誉。
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'});
}