2013-08-13 2 views
0

toolbarbutton 초기화를 수신하는 적절한 방법은 무엇입니까 (addon의 현재 상태에 따라 아이콘을 변경하고 싶습니다)?Firefox toolbarbutton 초기화 이벤트

지금 방금 window.load을 듣고 있는데 도구 모음 버튼이 document.getElementById을 통해 존재하는지 감지하고 있습니다.

사용자 도구 모음 사용자 지정의 경우 도구 모음 단추를 제거한 다음 사용자가 다시 추가 할 경우에 대비하여 aftercustomization 이벤트를 사용하고 있습니다.

하지만 더 직접적인 방법이 있습니까?

미리 감사드립니다.

+0

"초기화"이벤트 란 무엇을 의미합니까? 툴바 버튼은 DOM이 초기화 되 자마자 바로 나타납니다. 사용자가 툴바에 툴팁을 추가하지 않았을 때 팔레트에 숨겨져 있기 때문에 "일반"DOM API로 액세스 할 수 없습니다. . toolbarbutton DOM 요소에 대한 참조를 항상 얻으려고하십니까? 또는 툴바에 있거나 팔레트에 보이지 않는 툴바 버튼의 일부 속성을 업데이트하는 방법은 무엇입니까? – nmaier

+0

아 보이지 않는 툴바 버튼에 대한 참조를 얻을 수 있다는 것을 알지 못했습니다. DOM 참조를 얻으려면 어떻게해야할까요? – simonzack

답변

0

도구 모음 단추가 팔레트에서 숨겨 지거나 (사용자가 아직 추가하지 않았거나 제거한 경우) 여러 방법으로 도구 모음 단추를 "수정"할 수 있습니다.

document.getElementById 결과를 얻지 못하면 수동으로 팔레트를 검색하여 DOM 노드에 대한 참조를 수동으로 검색 할 수 있습니다. 이것은 어쨌든 browser.xul에서 작동합니다. 일부 코드 (사용하고있는 코드에서 단순화되었지만 일부 정리 후에는 테스트되지 않음). 대신 <broadcaster> (or <command>)에 "방송"다른 모든 nodesobserving 방송사에 소요되는 속성 세트를 사용할 수 있습니다 <toolbox>.palette

function findToolbarButtonAnyway(id) { 
    let tb = document.getElementById(id); 
    if (tb) { 
    return tb; 
    } 
    let palette = $("navigator-toolbox").palette; 
    for (let c = palette.firstChild; c; c = c.nextSibling) { 
    if (c.id == id) { 
     return c; 
    } 
    } 
    return null; // not found 
} 

이 사용합니다. 예 : 속성을 설정하고 적절한 CSS 규칙을 사용하여 적절한 아이콘 또는 기타를 선택하십시오. 이 솔루션은 더 깨끗하지만 시간을내어 파악할 수 있습니다.