gpt4 book ai didi

javascript - 模拟 JavaScript 的 setTimeout() 方法 “from first principles”

转载 作者:行者123 更新时间:2023-11-30 11:19:34 25 4
gpt4 key购买 nike

我正在尝试运行 setTimeout()在网站上通过 Firefox 的 Scratchpad .似乎关于这个特定的 JavaScript 方法存在各种 Firefox 错误 - 它是双胞胎,setInterval()。在 Firefox v.56 和最新的 Waterfox(都是“Quantum”之前的版本)中,这些 JavaScript 方法似乎根本不起作用。相比之下,在 Firefox “Quantum” 版本中,它似乎确实有效......也就是说,完全相同的代码在 FF “Quantum” 中有效,它在立即预“Quantum”版本的 Firefox。是的,我试过了 all sorts of variations .

在这个练习中,我遇到了 Firefox 之前的 Quantum 版本,我需要找到一种方法来“构建”这个 setTimeout() 方法可以说是原则。

一个想法是获取当前日期/时间,然后循环检查以查看是否已经过去了 10 秒(或 5 分钟),然后再继续执行进一步的代码/脚本。

关于如何使用 JavaScript 高效地模拟 setTimeout() 资源的想法,但没有 setTimeout()setInterval() ?


---编辑---

误报...也可以让 setInterval() 在旧版浏览器中工作;我的错!

(这意味着提出问题的原因已经消失,但问题本身可能仍然存在......)


---第二次编辑---

setTimeout() 在这里起作用:

setTimeout(function(){ alert("Hello"); }, 3000);

它不起作用/这里似乎被忽略了:

i=0;
while(i < 100)
{
// window.open("https://www.cnn.com","_self");
// window.open("https://www.bbc.com","_self");
// setTimeout(function(){ alert("Hello"); }, 3000);
setTimeout(function(){ window.open("https://www.bbc.com","_self") }, 3000);
setTimeout(function(){ window.open("https://www.cnn.com","_self") }, 3000);
alert(i);
i++;
}
// security mgr vetoed ???
  • 为什么?

最佳答案

如果您真的非常想模拟 setTimeout 函数而不阻塞浏览器等等,您可以尝试使用 requestAnimationFrame 函数来获得一些延迟。它应该适用于 Firefox 14.0+。类似的东西:

function mySetTimeout (callback, timeout) {
var startTime = performance.now();

function mySetTimeoutRec () {
requestAnimationFrame(function () {
// This way this function will be called
// asynchronously around 60 times per second
// (or less frequently on the inactive tabs).
// We can check that enough time has passed
// and call the user callback or this function again.
var currentTime = performance.now();
var elapsedTime = currentTime - startTime;

if (elapsedTime < timeout) {
mySetTimeoutRec();
} else {
callback();
}
});
}

mySetTimeoutRec();
}

可以像setTimeout一样使用:

mySetTimeout(function () { console.log('Howdy.'); }, 10 * 1000);

无论如何,在大多数情况下你不应该尝试做那样的事情。如果您似乎对 setTimeout 有问题,那可能是其他地方出了问题。

关于javascript - 模拟 JavaScript 的 setTimeout() 方法 “from first principles”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50303129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com