2009-11-06 3 views
2

Firefox를 닫을 때 내 사이드 ​​바를 열어두면 시작시 다시 표시됩니다. 나는 이것이 바람직하지 않으며 오히려 수동으로 열 때까지 숨어있을 것이라고 생각한다. 이런 일을 막을 수 있습니까?시작시 Firefox가 내 확장 프로그램의 사이드 바를 표시하는 것을 어떻게 방지 할 수 있습니까?

나는이 나타나지 않는 경우 사이드를 닫 위해 내 확장의 초기화 함수에 코드의이 비트를 추가하는 시도 :

toggleSidebar("mySidebar", false); 

이 너무 일관되게 작동도하지 않는 것 -을 무시하는 것 false 매개 변수로 사이드 바를 토글합니다! 제대로 작동하면 원하지 않는 부작용이 발생합니다. 사이드 바를 열고 닫아서 내용을 표시해야합니다. 기묘하지만 사이드 바의 가시성이 동기화되지 않았다는 파이어 폭스의 견해를 일부 반영한다고 생각합니다.

다른 사람들도 MozillaZine forums에서 같은 문제가있는 것 같습니다.

답변

2

또한 종료 프로세스에 관찰자를 추가하고, 거기에 사이드 바를 닫습니다 수 있습니다. 나는 당신과 같은 문제를 가지고 있었고 그 경로를 끝내기도했습니다. 왜냐하면 우리는 이미 관찰자에게 다른 정리를하도록 준비시켜 놓았 기 때문입니다.

코드는 주요 오버레이의 초기화하는 동안, 다음과 같습니다 도움이

var current = this; 
    var quitObserver = { 
    QueryInterface: function(aIID) { 
     if (aIID.equals(Components.interfaces.nsIObserver) || aIID.equals(Components.interfaces.nsISupports)) { 
     return this; 
     } 
     throw Components.results.NS_NOINTERFACE; 
    }, 
    observe: function(aSubject,aTopic,aData) { 
     var mainWindow = current._windowMediator.getMostRecentWindow("navigator:browser"); 
     var sidebar = mainWindow.document.getElementById("sidebar"); 
     if (sidebar.contentWindow.location.href == "chrome://daisy/content/sidebar.xul") { 
     mainWindow.toggleSidebar('openDaisySidebar', false); 
     } 
    } 
}; 

setTimeout(function() { 
    var mainWindow = current._windowMediator.getMostRecentWindow("navigator:browser"); 
    var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService); 
    observerService.addObserver(quitObserver,"quit-application-granted",false); 
},2000); 

희망을.

+0

교활한! 이 작업을 수행하는 데 어려움을 겪었습니다 (종료시 디버깅 부족으로 인한 문제는 아니지만). 결국 응용 프로그램이 종료 할 때까지 작동하지 않는 것으로 나타났습니다. 나는 여전히 창문을 얻을 수는 있었지만, quit-application-granted가 발동 될 때까지 문서가 없다는 것을 발견했다. – Mat

0

toggleSidebar("mySidebar", false); 두 번째 매개 변수는 "forceOpen"을 열기/닫기 플래그가 아니기 때문에 작동하지 않습니다.

Firefox에서 Mozilla 잡지에 대한 답변이있는 이유는 Firefox가 세션에서 사이드 바 상태를 유지하기 때문입니다. 여기에 달라 지실 필요가 있습니까?

여기에 시작할 때 사이드 바 열립니다 파이어 폭스의 코드는 다음과 같습니다

http://mxr.mozilla.org/mozilla-central/source/browser/base/content/browser.js#999 (나중에이 액세스 할 때 라인이 꺼져있을 수 있습니다 - 그것은 소스의 최신 버전에 대한 링크입니다)

1000  let box = document.getElementById("sidebar-box"); 
1001  if (box.hasAttribute("sidebarcommand")) { 

그리고 여기는 sidebarcommand 속성이 지속됩니다 어디 :

http://mxr.mozilla.org/mozilla-central/source/browser/base/content/browser.js#1422

,
1373 function BrowserShutdown() 
... 
1426 if (!enumerator.hasMoreElements()) { 
1427  document.persist("sidebar-box", "sidebarcommand"); 

나는이 시도 제안 : 현재 창 마지막 하나이며, 사이드 바이 열려
경우, BrowserShutdown가 지속 할 수있는 BrowserShutdown

  • 트릭 (이 registered as an unload handler for the window의) 전에

    • 중 하나 사이드 바을 닫습니다 오른쪽 속성 ("사이드 바를 열지 않음"에 해당)
    • 또는 이후 BrowserShutdown은 필요한 값으로 지속 된 값을 덮어 씁니다. 당신이 작업 솔루션을 가지고 올 경우

    , 바람직하게는 MDC에, 다른 사람과 공유하십시오 https://developer.mozilla.org/En/Code_snippets/Sidebar

  • +0

    차가움. forceOpen 플래그가 열려 있지 않거나 닫히지 않는다는 생각이 들었지만이를 확인했습니다. 거짓 전달을 가정하면 아무런 해를 끼치 지 않을 것입니다. URL 바에 유효한 URL이있을 때 사이드 바 만 이해할 수 있기 때문에 필자와 다른 필요가 있다고 느낍니다. 그럴 경우 일반 사이드 바를 표시 할 수 있습니다. 이러한 아이디어 중 일부는 사용하겠습니다. 감사. – Mat

    관련 문제