Tampermonkey替换window.onload

时间:2015-09-14 19:41:27

标签: javascript google-chrome tampermonkey

我正在尝试用自己的代码替换网站的window.onload功能:

window.onload = function () {alert("TEST");};

然而,据我所知,它不起作用(我没有警报)。我收录了// @run-at document-end。我认为这是一个及时拦截window.onload的问题。

2 个答案:

答案 0 :(得分:2)

document-endDOMContentLoaded事件处执行脚本(另请参阅Tampermonkey docs),因此如果页面很简单,onload事件可能已被触发,您的功能已赢得& #39; t run。

如果您要禁用/覆盖网页的window.onload功能:

// @run-at document-start
// @grant  none
....................
window.onload = function () {alert("TEST");};

第一行将指示Tampermonkey / Greasemonkey尝试尽快注入您的用户脚本,第二行将在网页的上下文/环境中运行您的用户脚本,因为默认情况下所有用户脚本都在带有代理DOM的单独沙箱中运行并且无法设置/调用网页功能,反之亦然。

如果您已经有一些@grant个密钥,请使用unsafeWindow代替:

// @run-at document-start
// @grant  unsafeWindow
// @grant  GM_addStyle
....................

unsafeWindow.onload = function () {alert("TEST");};

答案 1 :(得分:0)

您的代码应该适用于大多数浏览器。尝试使shure,当您的代码执行时,该窗口尚未处于加载状态。 以下代码将被调用,即使窗口已经加载,也会调用函数“onload”。

var onload = function()
{
    alert("TEST");
};

if (document.readyState === "complete") 
    onload();
else 
    (addEventListener || attachEvent).call(window, addEventListener ? "load" : "onload", onload);