搜索 | 用户支持

防范以用户支持为名的诈骗。我们绝对不会要求您拨打电话或发送短信,及提供任何个人信息。请使用“举报滥用”选项报告涉及违规的行为。

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?)

您需要登录才能回复。如果您还没账号,可以提出新问题