문제는 jQuery UI가 브라우저 창에 있으며 브라우저 창이 열려있는 한 "활성"상태를 유지한다는 것입니다. 그러나 탭은 내용 탭에 있으며 탭을 닫으면 바로 사라집니다. jQuery UI는 탭에 대한 로컬 참조를 어딘가에 유지해야하며 해당 참조는 탭이 닫힌 후에도 (가비지 컴 파트먼트) 가비지 수집을 허용하지 않습니다. 한 가지 해결책은 참조를 찾아서 제거하는 것입니다. 그러나 비록 당신이 그것을 이렇게 해결했다 할지라도 (나는 jQuery에 대해 충분히 알지 못한다.) jQuery UI가 웹 페이지에서 실행되도록 설계 되었기 때문에 문제가 다시 발생할 가능성이있다. 이러한 메모리 누수는 고려되지 않는다. 그곳에.
jQuery UI를 담당하는 UI와 동일한 컨텍스트에서 jQuery UI를 실행하는 것이 더 강력한 솔루션입니다. 이렇게하면 탭을 닫을 때 jQuery UI와 그 위젯이 모두 삭제되어 좀비 구획이 더 이상 필요 없습니다. mozIJSSubscriptLoader를 사용
// Load content script into the current tab
var contentScriptURL = "chrome://.../content/contentScript.js";
gBrowser.selectedBrowser.messageManager.loadFrameScript(contentScriptURL, false);
그리고 contentScript.js
다음의 상황에 jQuery를 및 jQuery를 UI를로드 할 것이다 : 이것은 message manager 예를 들어, 사용하여 수행 할 수
var scriptLoader = Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
.getService(Components.interfaces.mozIJSSubScriptLoader);
scriptLoader.loadSubScript("chrome://.../content/jquery.js");
var jQuery = jQuery.noConflict(true);
scriptLoader.loadSubScript("chrome://.../content/jquery-ui.js", jQuery);
...
$j(mydiv).find('#targetid').tabs({selected: 2});
이 콘텐츠 스크립트는 스크립트와 동일한 크롬 권한이 오버레이에서 실행되지만 탭이 닫히면 언로드됩니다. 탭과 함께 탭의 내용을 유지할 수도 있습니다.
이 컨텍스트는 무엇입니까? jQuery UI 라이브러리가 확장 컨텍스트에로드되는 동안 jQuery 탭을 컨텐츠 페이지에 적용하고 있습니까? –
예 콘텐츠 페이지에 탭을 적용하고 있습니다. – MKumar
그리고 jQuery UI를 어디서로드 했습니까? 콘텐츠 스크립트, XUL 오버레이, 애드온 SDK 모듈? –