B站网页加载事件为何多次触发?油猴脚本如何避免?

B站网页加载事件为何多次触发?油猴脚本如何避免?

b站网页的加载事件为何会多次触发,以及如何利用油猴脚本避免这个问题,是本文探讨的重点。作者通过一个简单的油猴脚本测试了window.onloadwindow.addeventlistener('load', ...)两种事件监听方式在b站视频页面的表现。实验结果表明,使用addeventlistener时,load事件会被多次触发,而onload只会触发一次。这引发了对网页加载机制和准确判断页面完全加载的思考。

以下是作者提供的测试脚本:

// ==UserScript==// @name         Temp// @namespace    no// @match        https://www.bilibili.com/video/*// @run-at document-start// ==/UserScript==//单独使用,只会触发一次onload事件/*window.onload=alert("onload is triggered");*///单独使用,会触发多次load事件/*window.addEventListener("load",()=>{    alert("load is triggered");})*///混合使用,会触发多次:onload——load——onload——onload——load/*window.onload=alert("onload is triggered");window.addEventListener("load",()=>{    alert("load is triggered");})*///混合使用,会触发多次:onload——load——onload——onload——load——load/*window.addEventListener("load",()=>{    alert("load is triggered");})window.onload=alert("onload is triggered");*/

实验结果显示,同时使用window.onloadwindow.addEventListener('load', ...)会导致load事件多次触发。 这并非addEventListener本身的问题,而是与B站网页的复杂加载机制有关。

一个可能的解释是B站页面使用了iframe,iframe的加载也会触发load事件。此外,其他油猴脚本可能也创建了隐藏的iframe,进一步加剧了这个问题。建议先禁用其他油猴脚本进行测试。如果问题依然存在,则需要在脚本中添加条件判断,避免在iframe环境中执行。

另一个原因可能是B站使用了AJAX异步加载内容,这些内容加载完成不会触发load事件。 针对这种情况,可以使用MutationObserver监听DOM变化,或者setInterval定时轮询来检测页面加载状态,但这并非最佳方案,更精准的解决方案需要深入分析B站页面的具体加载流程。

以上就是B站网页加载事件为何多次触发?油猴脚本如何避免?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1561867.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月22日 06:53:29
下一篇 2025年12月22日 06:53:42

相关推荐

发表回复

登录后才能评论
关注微信