Можно ли в расширении Chrome надежно переместить всплывающее окно расширения за пределы экрана? - PullRequest
0 голосов
/ 19 июня 2020

При нажатии сочетания клавиш расширения Chrome я создаю всплывающее окно, используя chrome.windows.create({ type: "popup", ... }). Чтобы расширение оставалось максимально отзывчивым, я хочу «скрыть» окно, переместив его за пределы экрана. Таким образом, при следующем вызове сочетания клавиш расширения я могу просто переместить окно на экране, чтобы «показать» его. Это позволяет избежать анимации нового окна ОС, рисования браузера chrome, загрузки страницы и т. Д. c.

Я использую chrome.windows.update(<windowId>, { left: 10000, top: 10000 }), чтобы переместить окно в пиксельную позицию, которая находится за пределами экрана, а затем переместите его на экран, чтобы отобразить.

На Windows 10 это отлично работает, когда масштабирование пользовательского интерфейса в настройках дисплея установлено на 100%. К сожалению, если пользовательский интерфейс масштабируется, скажем, до 150%, перемещение окна за пределы экрана не работает (хотя иногда и работает). Если я переместу окно в { left: 10000, top: 10000 }, оно окажется в правом нижнем углу экрана. Если я переместу его в { left: -10000, top: -10000 }, он окажется в верхнем левом углу.

В macOS 10.15 окно в основном перемещается за пределы экрана, но с видимой полосой. Похоже, я столкнулся с некоторыми c поведением / ошибками, специфичными для ОС.

Есть ли способ надежно переместить / скрыть всплывающее окно за пределы экрана?

1 Ответ

0 голосов
/ 19 июня 2020

Для этого нет встроенного API расширения.

Обходной путь 1: переместите вспомогательное окно под основное.

Обходной путь 2: сверните вспомогательное окно, установив от state до 'minimized'.

Обходной путь 3: используйте nativeMessaging для запуска отдельной утилиты (вы можете написать ее на любом языке, например node.js, которая работает на всех платформах. ), который будет использовать низкоуровневые методы ОС для непосредственного управления видимостью окна.

Обходной путь 4: вставьте пользовательский интерфейс внутрь страницы как DOM + ShadowDOM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...