如果我导航到另一个页面,setTimeout不起作用

我试图在特定点击事件后10秒执行一个javascript。我使用了setTimeout

 setTimeout(function () { alert('hello'); }, 10000); 

它可以工作,如果我点击后在同一页面。但如果我导航到其他页面,它不起作用。 因此,假设setTimeout适用于特定页面而不是整个应用程序是正确的。

有什么方法可以做我想要实现的目标。

浏览器中发生的一切都是文档绑定的。 当您离开当前文档(页面)时,它会被废弃,包括计时器 – 正如预期的那样。

所以你在这里尝试的只是使用计时器是不可能的。

可以在计时器启动时和完成时写入localStorage (或sessionStorage )项目,并从新页面(如果它来自同一来源)您读取项目并计算差异并启动新计时器(或将参数添加为导航到的URL的一部分。

Javascript代码是页面绑定的。
如果您在第1页上包含了x1.js,那么除非您已包含该脚本或放入全局范围,否则此脚本将不会在第2页上执行。
当您导航到另一个页面并且浏览器被刷新时,加载的脚本将丢失,并且将加载包含脚本的新页面。

是的,这是关于它所在的页面。 您可以添加一个标志,指出超时是否有

  • 没有设定
  • 已设置但未运行或
  • 设置并已经运行。

然后,如果用户导航到其他页面,您可以在onunload事件中检查该标志。 如果已经设置但尚未调用,则只需调用它即可。

当您导航到另一个页面时,浏览器将加载新页面,旧页面中的所有setTimeout / etc都将丢失,就像游戏结束并开始新游戏一样。

您可以尝试单页应用程序 ,您的所有页面都在同一个DOM中,并可以实现您的结果

试试这个解决方案

在你的firstpage.html

 function initFunc() { setTimeout(function () { alert('hello'); }, 10000); } $(document).ready(initFunc); 

现在在secondpage.html您可以随时调用initFunc()。

如果需要将第一页中的函数调用到第二页,则应将该函数编写为全局函数