将旧的附加组件从迁移XUL
到Add-ons-SDK
准备WebExtensions
. 仍然希望使用此插件支持一些较旧的浏览器,所以这就是我不直接跳到WebExtensions
.
我想做的是控制最小化,最大化全屏和恢复功能。这些似乎是在窗口对象上实现的,因为 FF 45.0,这很棒,但在尝试支持旧浏览器时没有帮助。不确定该功能之前是否存在,或者如何在 XUL 迁移友好的上下文中访问它(步骤 1:使用 Services.jsm)。请参阅从 XUL Overlay 迁移到 Restartless。
我能找到的最好的方法是使用Components.interfaces.nsIDOMChromeWindow.windowState
属性STATE_*
来检测最小化、最大化、正常或全屏状态,然后发出方法minimize()
,maximize()
并restore()
在同一个对象(nsIDOMChromeWindow)上找到。
但我似乎无法找到加载等价物的精确方法
Components.interfaces.nsIDOMChromeWindow.windowState
使用resource://
喜欢Services.jsm
。
例如,旧的附加组件也使用:
Components.interfaces.nsIPrefBranchInternal
后来改名为
Components.interfaces.nsIPrefBranch2
后来折叠成
Components.interfaces.nsIPrefBranch
现在可以通过以下方式访问:
Components.utils.import( 'resource://gre/modules/Services.jsm' );
var prefsService = Services.prefs;
有关选项,请参阅MDN 上的 Services.jsm 。
| Service accessor | Service interface | Service name |
|-------------------|----------------------|-------------------------|
| domStorageManager | nsIDOMStorageManager | DOM Storage Manager |
| DOMRequest | nsIDOMRequestService | DOMRequest service |
| wm | nsIWindowMediator | Window mediator service |
| ww | nsIWindowWatcher | Window watcher service |
有两件事以nsIDOM*
(请求和存储)开头,但似乎不相关,或者有任何通往所需对象的路径。 nsIWindow*
(Mediator 和 Watcher) 都有一些方法返回一个类似命名的nsIDOMWindow
对象(在 FF 44 中已弃用),包括一个名称容易混淆getChromeForWindow()
的方法,但那不是相同的对象,而且确实没有任何所需的状态属性或窗口管理切换方法。
我不确定我在这里缺少什么。这仅仅是开发人员决定为“低级别”并因此拒绝通过 Services.jsm 提供任何高级访问权限的事情之一吗?还是那里有访问权限但文档不完整?还是被记录在案但被埋葬了?或者它是关于某个地方的博客?我只能在所有 StackOverflow 上找到一篇文章,甚至其中有nsIDOMChromeWindow
!
正如我最初所说,我知道在“旧”样式 XUL/Overlay 以及“新”FF >= 45 中都有一种简单的方法可以做到这一点,但我希望支持中间区域,在至少再过一两年,直到他们完全放弃 XUL。届时,我将准备好 Add-ons-SDK 版本,并且 WebExtensions 正在顺利进行中。