3

古いバージョンの jQuery (1.3.1) が既にあるページを変更するユーザースクリプトで、必要な新しいバージョンの jQuery (1.4.2) を提供する最善の戦略は何ですか?

元のページでは引き続き「$」記号を使用し、スクリプトでは によって割り当てられたエイリアスを使用することをお勧めしjquery.noConflict()ます。

この質問への回答によると、ロードしたい追加バージョンは元のスクリプトタグの上に配置する必要があります。ページの読み込み後に GreaseMonkey がスクリプトを実行するという印象を受けているので、ここで少し混乱します。

編集: 1.3.1関数を使用する元のページのコードを壊さないように、ユーザースクリプトに1つの考えがあり、jQuery 1.4.2のスクリプトタグを追加し、エイリアスを設定してから、1.3.1のスクリプトタグを再度追加します。

var code142 = function() {
    gj = jQuery.noConflict(true);
    alert("142...");
    alert(gj); // check if the dollar (jquery) function works
    alert(gj().jquery); // check jQuery version
}

var script = document.createElement("script");
script.src = 'http://code.jquery.com/jquery-1.4.2.min.js'
document.documentElement.appendChild(script);


// assign jquery object alias and run code that uses 1.4.2 there
var script = document.createElement("script");
script.textContent = '(' + code142.toString() + ')();';
document.documentElement.appendChild(script);

/* The following is perhaps redundant, see EDIT 2 for more info

// add jquery 1.3.1 (again)
var script = document.createElement("script");
script.src = 'http://code.jquery.com/jquery-1.3.1.min.js'
document.documentElement.appendChild(script);

*/

ただし、これには jQuery ライブラリをページごとに 3 回ロードする必要があります。もっと良い方法はありますか?

編集 2: GM スクリプトが 1.4.2 のコピーを提供しているにもかかわらず、元のページは 1.3.1 のコピーを引き続き使用できるようですgj。 1.4.2 内の jQuery オブジェクトcode142()

他に何も出てこなければ、これが私の解決策です。この問題に遭遇する可能性のある他の人々に役立つことを願っています。

4

1 に答える 1

2

私はこれがあなたが探しているものだと信じています

複雑なことを何もせず、最新バージョンが必要ない限り、リンクのパターンに従ってそれを含めてください。

typeof unsafeWindow.jQuery == 'undefined'再び含める前に、jQuery がロードされている ( ) かどうかをチェックします。「単純な」部分は、あなたがやっていることが 1.3 と 1.4 の両方、おそらく 1.2.6 で機能することを意味しますか? その場合、ロードされている限り、ロードするバージョンは問題ではありません。(非常に古いサイトでない限り、使用している関数が jQuery コアに戻っていることを確認してください。ただし、これは可能性がはるかに低いです)

于 2010-04-29T11:27:35.413 に答える