古いバージョンの 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()
。
他に何も出てこなければ、これが私の解決策です。この問題に遭遇する可能性のある他の人々に役立つことを願っています。