javascript - 替代“加载”侦听器以加载 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):
- 将该类的元素添加到
X
. - 使用添加的元素
X
并重新加载以重新执行此操作
还有另一种方法可以做到这一点吗?
解决方案
更改window.addEventListener("load", function(event) { ... }
为后$( document ).ready(function() { ... }
,脚本的行为符合我的预期。
显然,我不需要加载整个页面来使用 DOM 中的元素,只需要加载 DOM,这可以通过第二个命令来完成。最好在这里解释差异
在文档“准备好”之前,无法安全地操作页面。jQuery 会为您检测到这种准备状态。包含在 $( document ).ready() 中的代码只会在页面文档对象模型 (DOM) 准备好执行 JavaScript 代码时运行。包含在 $( window ).on( "load", function() { ... }) 中的代码将在整个页面(图像或 iframe)(而不仅仅是 DOM)准备好后运行。
推荐阅读
- node.js - 带有 React 的 Socket.io 在 5 条消息后表现异常
- python - 处理需要服务器调用的类字段的最佳实践
- multithreading - 如果我在已经使用 100% CPU 的系统上实现多线程会发生什么
- flutter - 如何在颤动中显示随机数
- node.js - mongoose-unique-validator ReferenceError:未定义用户
- sql - ORA-01850: 小时必须在 0 到 23 之间
- python - 将边缘检测转换为遮罩
- javascript - mac safari 显示完整的 console.log 输出
- c# - 用于检查表中一列数据的 C# 代码是否存在于其他表中
- reactjs - React js 通用布局与 React Router