2012-12-04 1 views
2

이 문제에 대한 많은 게시물을 읽고 jQuery를 포함하는 모든 방법을 시도했습니다.글로벌 네임 스페이스에 충돌이없는 Firefox 확장 기능의 jQuery

xul 파일에 jQuery를로드하고 변수에 저장하면 작동합니다. 그러나

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

(How to use jQuery in Firefox Extension에서와 같이), 나는 여기에 제안 솔루션은 훨씬 더 의심 :

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

그러나 I를 : 페이지로드 이벤트 처리기에서 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; 
}, 

계속 wnd.jQuery가 정의되지 않은 채로 있습니다. (링크에있는 사람들 중 일부는 문제라고 말했습니다.)

어떻게해야합니까? jQuery는 어떻게 사용합니까? 파이어 폭스 확장 기능 내에서의 충돌에 대해서는 걱정하지 않으셔도됩니다.

+0

질문에 대한 답변이 없지만 위의 작업을 수행하기 전에'$'또는'jQuery' 변수가 이미 네임 스페이스로되어 있는지 확인해야합니다. – Ohgodwhy

+0

네, 그렇다고 오래된 버전 일 수도 있습니다. 여하튼, 나는 somemore를 실험해야만합니다. –

답변

1
더 조사 후

, 그는 끊임없는 작업 오므리 BAUMER 덕분에 ... 우리는 오류가 왜 우리는 지금

을 이해합니다.

을 수행하는 올바른 방법은 포함로 XUL 파일에없는 (I 의심으로)하지만, 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에게 감사드립니다!