是的,这是使用// @run-at document-start
. @required
试图操纵 DOM 的脚本可能会抛出错误。(但许多@required
库都很好,因为它们只是加载稍后由您的代码激活的工具)。
您可以使用 、 和监视 来解决@resource
此eval()
问题readyState
。像这样:
// ==UserScript==
// @name _Using DOM-manipulating libraries with run-at start
// @include http://YOUR_SERVER/YOUR_PATH/*
// @run-at document-start
// @resource jQ_src https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js
// ==/UserScript==
var jQ_src = GM_getResourceText ("jQ_src");
window.addEventListener ("readystatechange", FireWhenReady, true);
function FireWhenReady () {
this.fired = this.fired || false;
if ( document.readyState != "uninitialized"
&& document.readyState != "loading"
&& ! this.fired
) {
this.fired = true;
eval (jQ_src);
$(document).ready (DoStuff);
}
}
function DoStuff () {
//--- Where this next paragraph appears can give you an idea of the delays involved...
$("body").append ('<p style="background:yellow;">Hello from quick-start jQuery!</p>');
}
重要的!对于像 jQuery 这样的库,使用 没有多大意义@run-at document-start
,因为 jQuery 无论如何都不会让你做任何事情$(document).ready()
,这是 Greasemonkey 默认触发的时候。
提前加载 jQuery 对您没有任何好处,因为您必须显式使用$(document).ready()
(或一种快捷方式)。您可能有其他使用 jQuery 的原因@run-at document-start
,也许以后还想使用 jQuery。