1

将旧的附加组件从迁移XULAdd-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 正在顺利进行中。

4

0 回答 0