window.load总是在chrome上激活?

时间:2012-03-22 15:45:09

标签: javascript google-chrome greasemonkey onload userscripts

我有这个用户名:

// ==UserScript==
// @name          test
// @namespace     test
// @description   show's an alert on load
// @include       http://*
// @include       https://*
// ==/UserScript==

window.addEventListener('load', function(){alert("loaded");}, false);

这适用于所有网页上的Firefox,但在某些情况下在Chrome上根本不起作用。

这个网站就是一个例子:http://lexin.nada.kth.se/lexin/ 在地址中输入链接并按Enter键,正常加载页面但不会弹出警报。如果按F5刷新页面,则会出现弹出窗口。

对这种奇怪的行为有什么解释吗?

2 个答案:

答案 0 :(得分:7)

问题的原因是,当文档已经完全加载时,有时会执行内容脚本。使用以下内容脚本(“用户脚本”)说明了这一点:

// ==UserScript==
// @name          Test
// @namespace     Test
// @include       *
// ==/UserScript==

window.addEventListener('load', function(){alert("loaded");}, false);
alert(document.readyState);   // When this prints "complete", onload never runs

要解决此问题,请使用@run-at document-start元规则,这会导致脚本在创建文档之前执行:

...
// @run-at   document-start
// ==/UserScript==

答案 1 :(得分:0)

此调用可能在页面上加载太晚。将此代码添加到页面的最顶部,看看是否可以修复它。

如果不是,请发布一些其他信息。 (正在进行调用的地方?页面上的更多信息?是从外部.js文件调用的吗?)