2010-05-06 5 views
1

참고 :이 내용은 Firefox 확장 기능과 관련되어 있으며 일반적인 질문은 아닙니다.Firefox 확장자 js 객체 초기화

파이어 폭스 확장 프로젝트에서 파이어 폭스 창당 자바 스크립트 객체를 한 번만 초기화해야합니다. 그렇지 않으면 창을 열 때마다 새 타이머가 사용되며 새 속성이 사용되므로 모든 것이 처음부터 시작됩니다.

희망 아래의 예는

var StupidExtension 
{ 
    statusBarValue: "Not Initialized Yet", 
    startup: function() 
    { 
    ... 
    // Show statusBarValue in Status Bar Panel 
    }, 
    initTimerToRetrieveStatusBarValueFromNetwork: function() 
    { 
    ... 
    } 
} 

그렇게 때마다 Ctrl 키 + N을 명중 내 질문 : 신비성 것입니다 일부 후에, 그래서 "아직 초기화"를 선택한 다음 새 타이머가 해고 될 것입니다 볼 새 창 네트워크에서 데이터를 검색 할 때 두 번째 창에서도 값을 볼 수 있습니다. 이상적으로는 하나의 타이머 기능을 실행하고 모든 Firefox 창에서 모든 상태 표시 줄 패널을 업데이트하는 것입니다.

물론 환경 설정이나 다른 저장소에 값을 저장 한 다음 캐싱 할 수도 있습니다. 그러나 이것이 인공적인 것 같아요.

그래서 모든 Firefox 창 인스턴스 중에서 정적 인 일부 객체를 만드는 "기본"기술이 있을까요?

+0

"자바 스크립트 개체를 Firefox 창당 한 번만 초기화해야합니다." - 각 창마다 한 번이 아니라 모든 창에 대해 한 번 의미합니다. 그게 처음에 혼란 스러웠습니다. – Nickolay

답변

1

https://developer.mozilla.org/en/Working_with_windows_in_chrome_code#Advanced_data_sharing

가져 오기 JS 모듈 모든 창에 (당신이 작성해야합니다). 그것은 당신에게 모든 것을 통해 공유되는 객체를 제공합니다. 모듈에서

하는 타이머 코드를 구현하거나 모든 창에 알림을 보낼 표준 observer service를 사용 (윈도우 업데이트해야 할 때마다 타이머 콜백 .notify()를 호출, 각각의 창은 .addObserver()에 등록 관찰자가 있습니다) 또는 구현하여 jsm에서 내 보낸 객체에 대해 addObserver/removeObserver 메소드를 소유하십시오.

+0

정확 하 게, 매력처럼 일했다! 혼란스럽게해서 죄송합니다. Spasibo bolshoe :) – Pablo

+0

@ 마이클 : 천만에! – Nickolay

0

은 크롬 매니페스트 파일의 경우는 같은 있습니다

overlay chrome://browser/content/browser.xul chrome://path/to/youroverlay.xul 

을 그리고 오버레이는이

을 somejsfile.js을 포함하고 somejsfile.js 내이 있습니다

var myExtension = { 
    statusBarValue: "Not Initialized Yet", 
    startup: function startup(){ 
    // Show statusBarValue in Status Bar Panel 
    }, 
} 

window.addEventListener("load", function() { myExtension.startup(); }, false); 

방금 ​​전에 말했던 모든 것을 생각하면 사용자가 새 창을 열면 각 창마다 시작이 실행되고 statusBarValue는 해당 창에 관계없이 "초기화되지 않음"이어야합니다. 그 창.

browser.xul을 오버레이하고 각 창에 자체가 있기 때문에 각 창에는 자신의 확장 버전이 있습니다. 이 탭은 새 탭이 아니라 새 탭이라는 점에 유의하십시오.

그렇기 때문에 언급 한 것과 유사한 기술을 사용하여 어떻게 든 동기화해야 할 것입니다.

+0

그게 외모 부분이에요. UI 요소를 업데이트 할 때마다 모든 브라우저 창을 열거하고 모든 기능을 '적용'할 때도 기술을 보았습니다. 이것이 얼마나 효과적인지 확신 할 수 없습니다. 한 가지 더 요점은 정적 회원은 어떨까요? 주기적으로 무언가를 가져 오는 기능이 있고 주기적으로 해당 기능의 인스턴스를 1 개만 실행하는 것과 같이 기능성 부분은 어떻습니까? – Pablo

관련 문제