2

私はこの問題に関する多くの投稿を読み、jQueryを含めるためのあらゆる方法を試しました。

jQueryをxulファイルにロードし、それを変数に格納すると、機能します。(Firefox拡張機能でjQueryを使用する方法のように)

jQuery.noConflict();
sbsh.safeWalletUtils.$ = function (selector, context) {
    return new jQuery.fn.init(selector, context || doc);
};
sbsh.safeWalletUtils.$.fn = sbsh.safeWalletUtils.$.prototype = jQuery.fn;

ただし、ここで提案する解決策の方がはるかに優れていると思います:http: //forums.mozillazine.org/viewtopic.php? f=19&t=2105087

loadjQuery: function(wnd){
  var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
 .getService(Components.interfaces.mozIJSSubScriptLoader);
  loader.loadSubScript("chrome://clhelper/content/jquery/jquery-1.5.js",wnd);
  var jQuery = wnd.jQuery.noConflict(true);
  loader.loadSubScript("chrome://clhelper/content/jquery/jquery.hoverIntent.js", jQuery);
  return jQuery;
 },

ページロードイベントハンドラー内:

var doc = event.originalTarget;
var wnd = doc.defaultView;
// load jQuery and save it as a property of the window
myprivatejQuery = loadjQuery(wnd)

しかし、私はwnd.jQueryを未定義にし続けています..(リンク内の少数の人々もそれが問題であると言いました)

私は何をすべきか?Firefox拡張機能内の競合を心配せずにjQueryを使用するにはどうすればよいですか?

4

1 に答える 1

1

さらなる調査の後、Omri Baumer の絶え間ない作業に感謝します..

エラーが発生する理由がわかりました。

それを行う正しい方法は、(私が疑ったように) インクルードとして xul ファイルではなく、ラップされていない js オブジェクトを呼び出すことです。

// correct function to load jQuery
var loadjQuery = function(wnd){
  var loader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
   .getService(Components.interfaces.mozIJSSubScriptLoader);
   loader.loadSubScript("chrome://sbshsafewallet/content/jquery-1.8.3.js", wnd);
   var jQuery = XPCNativeWrapper.unwrap(wnd).$;
   jQuery.noConflict(true);
  return jQuery;
};


// field to store the jQuery for the current document window (as there can be multiple tabs)
var jQueryForWindow = null;

// event to call on window load (didn't include the code, left for reader to do)
windowLoad = function (event)
{
    var appcontent = document.getElementById("appcontent"); // browser  
    appcontent.addEventListener("DOMContentLoaded", pageLoadedInit, false);
}

// load jQuery on DOMContentLoaded event
pageLoad = function (event) {
      var doc = event.originalTarget;
      var wnd = doc.defaultView;
      jQueryForWindow = loadjQuery(wnd);
}


//example of function using the jQuery
function usesjQuery()
{
   var $ = jQueryForWindow;
   //do something with jquery here
}

これが立ち往生しているすべての人に役立つことを願っています!!

オムリ・バウマーに改めて感謝します!

于 2012-12-11T08:21:33.653 に答える