2012-03-22 89 views
2

我有这个userscript:window.load不会始终在Chrome上触发?

// ==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/ 输入地址中的链接并点击回车,正常加载页面,但没有弹出提示。如果按F5刷新页面,则弹出窗口出现。

对这种奇怪的行为有一些解释吗?

+1

@mgraph'window.onload'全部为小写 – JaredMcAteer 2012-03-22 15:48:31

回答

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== 
+0

谢谢!这解决了它。 – Pithikos 2012-03-22 17:53:38

0

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

如果不是这样,请发布一些额外的信息。 (正在拨打电话的地方?页面上的更多信息?是否从外部.js文件调用此项?)

+0

这是一个用户脚本,这意味着如果您有Chrome浏览器,只需将它拖放到浏览器中即可。然后它会在每个页面上自动运行在自己的沙箱上。 – Pithikos 2012-03-22 16:55:36