繁体   English   中英

setTimeout触发得太早(?)

[英]setTimeout firing too soon(?)

好的,现在我正在编写一些JavaScript代码,只需将粘贴复制到Firefox控制台中即可运行。 (对不起,我仍然是一个笨拙的菜鸟,我想编写一个小脚本,基本上可以打开某个网页并从其中的某些div收集信息。)

但是,我目前正在苦苦挣扎。 我想打开某个网页,然后在完全加载它之后执行某个功能。 (出于简单的原因,此函数仅从0到99计数。)

function openGroupsPage() {

 window.location.replace(groupURL);

 setTimeout(function() {
  for (i = 0; i < 100; i++) {
    console.log(i)
  }
 } , 10000)
}


openGroupsPage()

我的问题是 :增量函数永远不会被调用(或者至少看起来像这样,因为我永远不会在控制台中看到任何类型的输出。)为什么我的setTimeout无法正常工作,或者有什么其他选择可以完成我想做的事情? 我真的很想在新访问的网站完全加载完毕后运行特定功能。

当您更改位置时,窗口对象及其所有关联的内容(包括计时器)将被丢弃,并创建一个新的对象。 您不能安排代码在旧文档中运行,甚至不能从浏览器控制台中运行在新文档中。 您必须导航到新页面后而不是之前粘贴并执行代码,这意味着您无法从代码导航到该页面。

您可能会看到TamperMonkey或GreaseMonkey之类的工具,这些工具可让您运行代码以响应与某些URL匹配的页面加载。

window.location.replace()退出当前页面并加载新页面。 因此,当前页面的所有剩余JavaScript都将不再执行

您的功能运行正常,唯一的问题是window.localtion行使用您提供的url重新加载了网站,因此整个页面从一开始就重新加载了,您的页面失去了功能。

尝试以下了解

function openGroupsPage() {

 //window.location.replace('http://www.google.com');

 setTimeout(function() {
  for (i = 0; i < 100; i++) {
    console.log(i)
  }
 } , 1000)
}


openGroupsPage()

您可以添加eventListener来执行页面的文档,该文档在页面加载时触发。

document.addEventListener('DOMContentLoaded' function(e) {
  // page is loaded do you fancy stuff in here 
  // no timeout needed
});

编辑:忽略了他想通过控制台在随机页面上执行此操作。 这将不起作用,因为在locationchange上,所有当前脚本都将停止并且全局对象将被销毁。

为此使用类似Greasemonkey东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM