setTimeout烧得太快(?)

时间:2017-03-05 15:54:13

标签: javascript asynchronous settimeout

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

然而,我现在正在挣扎。我想打开某个网页,然后,在完全加载后,执行某个功能。 (为简单起见,此函数的计数从0到99。)

<span class="icon-some"></span>

.icon-some {
 color: orange;
}

我的问题是:递增函数永远不会被调用(或者至少它似乎是因为我在控制台中看不到任何类型的输出。)为什么我的setTimeout不工作或什么是另一种选择,以实现我想做的事情?当新访问的网站完全加载时,我真的很想运行一个特定的功能。

4 个答案:

答案 0 :(得分:1)

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

您可能会查看TamperMonkey或GreaseMonkey等工具,以便您运行代码以响应与某些网址匹配的网页加载。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您的功能正常运行唯一的问题是var n;行使用您提供的网址重新加载网站,这样整个页面就会从开始重新加载,您的网页会丢失您的功能。

尝试以下内容了解

window.localtion

答案 3 :(得分:-1)

您可以添加一个eventListener来处理页面加载时触发的页面文档。

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

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

使用类似Greasemonkey的内容。