window.load总是不会在chrome上激活?

Pit*_*kos 3 javascript greasemonkey google-chrome 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);
Run Code Online (Sandbox Code Playgroud)

这在所有页面上都适用于Firefox,但在某些情况下在Chrome上根本不起作用.

一个例子是这个网站:http://lexin.nada.kth.se/lexin/ 输入地址中的链接并点击进入,正常加载页面但没有弹出警报.如果按F5刷新页面,则会显示弹出窗口.

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

Rob*_*b W 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 Code Online (Sandbox Code Playgroud)

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

...
// @run-at   document-start
// ==/UserScript==
Run Code Online (Sandbox Code Playgroud)