背景:我正在尝试以编程方式检测(通过注入的脚本)任意页面(不是我编码的)是否具有window.onload
函数集(通过window.onload=foo
,而不是 addEventListener
)。
我以为我可以简单地检查是否typeof window.onload === "function"
,但对于这种情况确实如此:
<script>
function onload() {
console.log('onload called'); // this is *not* triggered on page load
}
typeof window.onload === "function"; // is true
window.onload === onload; // is`true`
window.hasOwnProperty("onload"); // is`true`
</script>
但是该函数不会在页面加载期间自动调用。我已经在最新版本的 Chrome 和 Firefox 中进行了测试。
我认为那应该相当于这样:
<script>
window.onload = function() {
console.log('onload called'); // this *is* triggered on page load
};
</script>
但事实似乎并非如此。浏览器似乎有一个 setter(或类似的东西),它在显式分配时触发window.onload
,而全局变量则可以通过 window 对象隐式访问。
我如何才能通过注入脚本稳健地检测任意页面是否具有实际window.onload
设置(我的意思是在页面加载时触发的设置),而不仅仅是例如名为的全局函数onload
?
document.body.onload
是 的别名window.onload
。因此,应该输出以下内容
false
而使用
window.onload =
,应该输出以下内容(以及处理程序true
中的 console.logonload