Получите доступ к nsIDOMChromeWindow из Services.jsm или аналогичного, чтобы перейти с XUL на Add-ons-SDK

Миграция старого дополнения из XUL в Add-ons-SDK в подготовке к WebExtensions, Хотелось бы поддержать некоторые старые браузеры с этим дополнением, поэтому я не прыгаю WebExtensions,

То, что я хотел бы сделать, это контролировать минимизацию, максимизировать полноэкранный режим и восстанавливать функции. Похоже, что они реализованы прямо на объекте window, начиная с FF 45.0, что замечательно, но не помогает при попытке поддерживать старые браузеры. Не уверен, существовали ли ранее эти функции или как получить к ним доступ в дружественном для XUL-контексте контексте (Шаг 1: используйте Services.jsm). См. Миграция с наложения XUL на 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;

Посмотрите Services.jsm на MDN для вариантов.

| 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? Или доступ есть, но документация неполная? Или это задокументировано, но похоронено? Или это где-то в блоге? Я мог найти только один пост на всем Stackru, который даже имел nsIDOMChromeWindow в этом!

Как я уже говорил, я знаю, что есть простой способ сделать это как в "старом" стиле XUL/Overlay, так и в "новом" FF >= 45, но я надеюсь поддержать эту промежуточную область, в по крайней мере, еще год или два, пока они не уронят XUL. К тому времени у меня будет готовая версия Add-ons-SDK, и WebExtensions уже в разработке.

0 ответов