搜尋 Mozilla 技術支援網站

防止技術支援詐騙。我們絕對不會要求您撥打電話或發送簡訊,或是提供個人資訊。請用「回報濫用」功能回報可疑的行為。

Learn More

userchrome.js: how to get notified when tabs open and close?

  • 無回覆
  • 0 有這個問題
more options

I've recently started using the Tree Style Tab extension, and I'm finding it useful, but I'd like it if the list of tabs could be automatically hidden when only one tab is open (and automatically shown when more than one tab is open).

I hoped to write an extension to do this, but opening the sidebar from an extension requires a user gesture, so I suspect I'll have to use a userchrome.js script.

From a "userchrome.js"-like environment (i.e. unsandboxed AutoConfig), I can hide and show the sidebar with `SidebarUI.hide()` and `SidebarUI.show("treestyletab_piro_sakura_ne_jp-sidebar-action")`, and I can examine the tabs open in the current window via `gBrowser.tabs`, but I can't see how to get notified when the number of tabs changes (replacing `gBrowser.tabs` with a proxy doesn't work, for example). I suppose I could just check every few seconds? That feels like a bit of a cop-out, though, and gets more and more inefficient the more windows are open.

There's an API for extensions to receive events when tabs open and close, so clearly this is possible. Where should I be looking for this functionality?

(I also don't know how I would go about unregistering an event listener (or cancelling a setInterval call!) when the window closes, assuming that's necessary to avoid leaking resources – is there an event like `chrome-document-global-created` I could listen for, but that fires during teardown of the window rather than when one is created?)

I've recently started using the Tree Style Tab extension, and I'm finding it useful, but I'd like it if the list of tabs could be automatically hidden when only one tab is open (and automatically shown when more than one tab is open). I hoped to write an extension to do this, but opening the sidebar from an extension requires a user gesture, so I suspect I'll have to use a userchrome.js script. From a "userchrome.js"-like environment (i.e. unsandboxed AutoConfig), I can hide and show the sidebar with `SidebarUI.hide()` and `SidebarUI.show("treestyletab_piro_sakura_ne_jp-sidebar-action")`, and I can examine the tabs open in the current window via `gBrowser.tabs`, but I can't see how to get notified when the number of tabs changes (replacing `gBrowser.tabs` with a proxy doesn't work, for example). I suppose I could just check every few seconds? That feels like a bit of a cop-out, though, and gets more and more inefficient the more windows are open. There's an API for extensions to receive events when tabs open and close, so clearly this is possible. Where should I be looking for this functionality? (I also don't know how I would go about unregistering an event listener (or cancelling a setInterval call!) when the window closes, assuming that's necessary to avoid leaking resources – is there an event like `chrome-document-global-created` I could listen for, but that fires during teardown of the window rather than when one is created?)

如果您還沒有帳號,您必須先登入帳號 來回覆文章。還沒有帳號的話,只能發問新問題