为什么在b站视频的网页,通过使用以下的油猴脚本,会多次触发load事件?

我是一个js爱好者,以下是我的脚本

// ==UserScript==
// @name         Temp
// @namespace    no
// @match        https://www.bilibili.com/video/*
// @run-at document-start
// ==/UserScript==
//单独使用这个,只会触发一次onload事件
/*
window.onload=alert("onload is triggered");
*/
//单独使用这个,会触发3次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");
*/

我使用的是火狐浏览器。
以及我的脚本注入时机为run-at document-start。
我知道通过使用window.onload的方式,只能为load绑定一个值,而通过addEventListener的方式,可以添加多个load监听器。现在的难题是,为什么我使用后者的方式,发现会触发3次load事件?触发load事件意味着什么呢?同时,我更想知道的是,有没有一种好用的方法,可以判断网页彻底加载的时机呢,上面的load事件会多次触发,因此我认为并不能满足这个目的。我在StackOverflow、百度都搜索了,没有找到我想要的答案,因此想来求助大家

我现在已经知道知道是iframe的缘故,会导致触发多次load事件。那么问题是,这种利用ajax加载的部分,不能触发load事件,往往是在load以后才完成加载的。所以除了使用MutationObserver对象来监听其变化,或者使用setInterval等定时监听以外,有没有别的方法来判断来其加载完成的时机吗?

阅读 2.7k
1 个回答

你把其他脚本屏蔽了再测看看。

估计装了其他脚本,在页面上创建了 iframe 你不知道。

或者设置不在 iframe 中运行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题