wordpress や magento など、さまざまな種類の Web サイトで実行できる JavaScript ライブラリがあります。js ライブラリは jQuery を動的にロードし、noConflict を呼び出して、スクリプト要素の onereadystatechange() で別の変数名前空間に割り当てます。ただし、サイトが js lib の前に Prototype js もロードする場合、Prototype と jQuery の間で競合が発生する可能性があります。
onereadystatechange コールバックが呼び出される前に、ページが解析され、Prototype 関数が呼び出される場合があります。その Prototype 関数が「$」を使用する場合、そのドル記号「$」はまだ (jQuery.noConflict() が呼び出される前に) Prototype ではなく jQuery であるため、その関数は失敗します。
私の現在の解決策は、プロトタイプのバージョンを確認し、jQuery の後に動的に再度ロードすることです。このようなもの:
var deps = [];
if(!hasJQueryReqVersion()) {
deps.push("//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js");
if ( typeof Prototype !== "undefined" ) { // if ptototype exists, load it again to avoid conflict
deps.push("//ajax.googleapis.com/ajax/libs/prototype/"+Prototype.Version+"/prototype.js");
}
}
// iterate deps and create javascript elements
上記の理由で Prototype を再度ロードする必要がないように、「$」をまったく使用しないように jQuery に依頼できますか?