Получите доступ к 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 уже в разработке.