はい、これは を使用することの欠点です// @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 のようなライブラリの場合、 を使用する意味はあまりありません。jQueryでは、とにかく@run-at document-start
それまで何もできず$(document).ready()
、Greasemonkey がデフォルトで起動するのはこのときだからです。
jQuery を早期にロードしても、(またはショートカット form の1 つ) を明示的に使用する必要があるため、何も得られません。を使用する他の理由があり、後で jQuery を使用したい場合もあります。$(document).ready()
@run-at document-start