技术解析

问个小白问题,如何让油猴脚本中的循环异步执行
0
2021-08-10 00:59:08
idczone

说下我的场景,一个动态加载的网页,他内容是再更新的,但是网页不刷新,这就导致了我的 JS 脚本只会被执行一次,那我就需要使用一个循环隔几秒钟就获取一下源码中的 element,如果匹配到了我要的元素,那就再执行之后的内容,如果没匹配到,那就接着循环。

我目前写了之后,他会在网页加载的一瞬间就启动这个循环,然后会话就被这个循环占用了,网页就没响应了。。。所以我希望让这个循环 和 网页的正常浏览互不影响


建议用 MutationObserver

时钟

setInterval 回调

我一般设置鼠标移动监听

Mutation Observer 就是用来在 DOM 变化时触发回调的,不需要手动循环检测
如果要循环检测的话,应该用 setTimeout
比如
function foo() {
var elm = document.querySelector('/> if(elm) {
// 实际执行代码
}else{
setTimeout(foo, 1000) // 1000ms 后重新调用 foo (准确地说是将 foo 加入任务队列)
}
}

或者爬虫直接请求 api ?

settimeout 每隔几秒去检测一次

MutationObserver +1

如果是百度之类的网站 MutationObserver 会用不了,已经被覆盖了

setInterval,检测到了再 clearInterval

竟然给覆盖成了 null,好鸡贼
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服