Firefox扩展中的jQuery在全局命名空间中没有冲突

Firefox扩展中的jQuery在全局命名空间中没有冲突,jquery,firefox,firefox-addon,add-on,browser-extension,Jquery,Firefox,Firefox Addon,Add On,Browser Extension,我已经阅读了很多关于这个问题的帖子,并尝试了所有方法来包含jQuery 如果我在xul文件中加载jQuery并将其存储在变量中,它就会工作。 (如中所示) 然而,我怀疑这里的建议解决方案要好得多: 在页面加载事件处理程序中: var doc = event.originalTarget; var wnd = doc.defaultView; // load jQuery and save it as a property of the window myprivatejQuery = load

我已经阅读了很多关于这个问题的帖子,并尝试了所有方法来包含jQuery

如果我在xul文件中加载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….(链接中很少有人说这就是问题所在)

我该怎么办?
如何使用jQuery而不用担心Firefox扩展内部的冲突?

经过进一步调查,感谢Omri Baumer坚持不懈的工作

我们现在明白了为什么会出现错误

正确的方法不是将xul文件作为include(如我所怀疑的那样)包含,而是通过调用unwrapped 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
}
希望这能帮助所有被困的人


再次感谢Omri Baumer

我对你的问题没有答案,但是你应该检查
$
jQuery
变量是否已经有了名称空间,然后再进行上述操作。是的,但这也可能意味着它是一个较旧的版本。无论如何,我必须进行更多的实验。。
var doc = event.originalTarget;
var wnd = doc.defaultView;
// load jQuery and save it as a property of the window
myprivatejQuery = loadjQuery(wnd)
// 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
}