도구 모음을 업데이트하려면/acceptdialog 이벤트)파이어 폭스 도구 모음 Prefwindow 언로드 나는 파이어 폭스 도구 모음을 개발하기 위해 노력하고있어
나의 구조는 options.xul에서
는 PrefWindow입니다 어느 쪽이 먼저 열려 있습니까
<toolbarbutton oncommand="esbTb_OpenPreferences()"/>
function esbTb_OpenPreferences() {
window.openDialog("chrome://Toolbar/content/options.xul", "einstellungen", "chrome,titlebar,toolbar,centerscreen,modal", this);}
그래서 내 환경 설정에서 어떤 툴바에 어떤 링크가 표시되는지를 나타내는 체크 박스를 설정할 수 있습니다. 따라서 환경 설정 창이 닫히거나 "확인"버튼이 눌려지면 DOM을 통해 업데이트하는 이벤트 나 기능을 발생시키고 싶습니다.
그래서 툴바가로드 될 때 호출되는 함수입니다. 툴바의 링크 가시성을 설정합니다.
function esbTB_LoadMenue() {
var MenuItemNews = document.getElementById("esbTb_rss_reader");
var MenuItemEservice = document.getElementById("esbTb_estv");
if (!(prefManager.getBoolPref("extensions.esbtoolbar.ShowNews"))) {
MenuItemNews.style.display = 'none';
}
if (!(prefManager.getBoolPref("extensions.esbtoolbar.ShowEservice"))) {
MenuItemEservice.style.display = 'none';
}
}
그래서 나는 ... 일부는 내가 시도한 방법으로 ... 작동하지 않는 대화에의 EventListener를 추가하는 것처럼 생각 을 시도 그리고 나는 또한 루트 창에서 창 개체를 넘겨 시도 (툴바)를 opendialog 함수의 인수로 사용하여이 함수를 this로 변경했습니다.
function esbTB_LoadMenue(RootWindow) {
var MenuItemNews = RootWindow.getElementById("esbTb_rss_reader");
var MenuItemEservice = RootWindow.getElementById("esbTb_estv");}
그리고 나서 핸드 오버 개체를 통해 요소에 액세스하려고했으나 런타임에도 도구 모음이 변경되지 않았습니다.
그래서 난 할 노력하고있어 런타임 동안 내 도구 모음의 공개 대상 링크를 변경하는 것입니다 내가 그렇게하는 방법을 난 이해가 안돼 ... 사전에
감사
------- 편집 -------
var prefManager = {
prefs: null,
start: function()
{
this.prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefService)
.getBranch("extensions.esbtoolbar.");
this.prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);
this.prefs.addObserver("", this, false);
},
end: function()
{
this.prefs.removeObserver("", this);
},
observe: function(subject, topic, data)
{
if (topic != "nsPref:changed")
{
return;
}
//Stuff what is done when Prefs have changed
esbTB_LoadMenue();
},
SetBoolPref: function(pref,value)
{
this.prefs.setBoolPref(pref,value);
},
GetBoolPref: function(pref)
{
this.prefs.getBoolPref(pref);
}
}
따라서 구현되었습니다.
알겠습니다. 그래서 prefmanager 객체의 구현을 수정해야한다고 생각합니다. 나는 이것을 좋아했다. var prefManager = Components.classes [ "@ mozilla.org/preferences-service;1"] ... 그리고 나서 메소드를 추가 할 수 있도록 변경해야한다. 그래서 약간의 질문이 prefManager.setBoolPref ("extensions.esbtoolbar.rss.visited", true); 예를 들어 prefmanager 객체에서 구현 한 다음 설정하고 설정을 가져 오는 메소드가 있어야합니까? 내가 무슨 뜻인지 알기를 바랍니다 :) 안부 – Mark
nsIPrefBranch2 인터페이스를 구현할 필요가 없습니다. 간단하게 사용하십시오. 관찰 방법을 어디에 두어야하는지 묻고 있습니까? – speedball2001
나는 내 대답에 좀 더 많은 코드와 설명을 넣었다. 희망이 도움이됩니다. – speedball2001