2

これを含むユーザースクリプトがあります:

// userscript header
(function() {
    // here is jquery source code
    var $ = $.noConflict();
})();

私が使用しているサイトは mootools を使用しているため、サイトのコードは$. noConflict何らかの奇妙な理由により、Firefox (23.0.1) では役に立ちません。サイトはまだ $ で jQuery を取得しているため、サイトの元の機能が壊れています。

ただし、次のように変更すると: var $ = jQuery.noConflict();

できます。なんで?

私はjsfiddleにユーザースクリプトを置くことができないので、問題を示すすべてのコード(左にHTML、右にユーザースクリプト)を含むgifがあります:

jQuery.noConflict の奇妙な動作

バージョン: すべて最新、Firefox 23.0.1、Greasemonkey 1.11、jQuery v1.10.2、Mootools 1.4.5-nc

「バグ」が発生しない環境: Chrome 29.0.1547.66m、Opera 12.16

4

2 に答える 2

0

jQuery のメソッドにはあまり詳しくありませんがnoConflict()、グローバル スコープで使用する必要があると想像できます。

無名関数のスコープ内で使用しているため、メソッドはこのスコープ外の宣言noConflict()には影響しません。$

行をグローバル スコープに移動する$.noConflict()と、問題ないはずです。

$.noConflict();
(function() {
    ...
})();
于 2013-09-06T17:53:58.370 に答える