首页 > 解决方案 > 替代“加载”侦听器以加载 HTMLcollection 元素

问题描述

我正在使用 Tampermonkey 在网页上运行一些 JavaScript。

我使用是因为我需要;x = document.getElementsByClassName("class")的长度和元素 x但在过去几周,旧代码不起作用,所以我不得不更改它并添加一个“加载”事件侦听器(在没有事件侦听器行之前它可以工作):

x = document.getElementsByClassName(" class ");

window.addEventListener("load", function(event) {
  sw = x.length; //(length of x is always between 0 and 4)
  switch (sw) {
    case 1:
      //do something with x[0] and reload after timeout;
      break;
    case 2:
      //do something with x[0] x[1] and reload after timeout
      break;
    case 3:
      //do something with x[0] x[1] x[2] and reload after timeout
      break;
    case 4:
      //do something with x[0] x[1] x[2] x[3] and reload after timeout
      break;
    default:
      setTimeout(function() {
        location.reload();
      }, RandomReloadTime * 1000);
      break;
  }
});

我需要它一直运行,所以我的问题是,当标签不活动时(通常是在我睡觉的晚上,PC 打开,标签打开,但 Chrome 将标签置于“睡眠”状态),网页是未加载,因此未激活侦听器;

总而言之,我想做的是(使用 Tampermonkey):

还有另一种方法可以做到这一点吗?

标签: javascriptaddeventlistenertampermonkeyhtmlcollection

解决方案


更改window.addEventListener("load", function(event) { ... }为后$( document ).ready(function() { ... },脚本的行为符合我的预期。

显然,我不需要加载整个页面来使用 DOM 中的元素,只需要加载 DOM,这可以通过第二个命令来完成。最好在这里解释差异

在文档“准备好”之前,无法安全地操作页面。jQuery 会为您检测到这种准备状态。包含在 $( document ).ready() 中的代码只会在页面文档对象模型 (DOM) 准备好执行 JavaScript 代码时运行。包含在 $( window ).on( "load", function() { ... }) 中的代码将在整个页面(图像或 iframe)(而不仅仅是 DOM)准备好后运行。


推荐阅读