2

@run-at document-startディレクティブの使用時に問題が発生しています。経験不足によるものだと思いますが、私の人生ではこれを理解することはできません.

他のいくつかのディレクティブを除いて、これがスクリプト全体です。

// @require https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js  
// @run-at  document-start

そしてFFのエラー

Error: document.documentElement is null  
Source File: file:///C:/Users/---/Test-1/jquery.js  
Line: 4899

問題を確認して理解しました。スクリプトを可能な限りドキュメントの開始に近づけて実行できるようにするためにどのような手順を実行すればよいかわかりませんが、それでも@requiredスクリプトは適切に機能します。
私の最初の投稿で少し緊張しています...安心してください:)

Firefox 12
グリースモンキー 0.9.20

4

1 に答える 1

1

はい、これは を使用することの欠点です// @run-at document-start@requiredDOM を操作しようとするスクリプトは、エラーをスローする可能性があります。(ただし@required、後でコードによってアクティブ化されるツールをロードするだけなので、多くのライブラリは問題ありません)。

@resourceeval()、および を監視することで、これを回避できます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

于 2012-05-17T01:27:04.510 に答える