在 Chrome 扩展程序中,是否可以可靠地将扩展程序的弹出窗口移出屏幕?



按下Chrome扩展程序的键盘快捷键时,我使用chrome.windows.create({ type: "popup", ... })创建一个弹出窗口。 为了使扩展程序尽可能具有响应性,我想通过将窗口移出屏幕来"隐藏"窗口。 这样,下次调用扩展程序的键盘快捷键时,我只需移动屏幕上的窗口即可"显示"它。 这避免了操作系统的新窗口动画、绘制浏览器镶边、加载页面等。

我使用chrome.windows.update(<windowId>, { left: 10000, top: 10000 })将窗口移动到屏幕外的像素位置,然后将其移动到屏幕上以显示它。

在 Windows 10 上,当显示设置中的 UI 缩放设置为 100% 时,这非常有效。 不幸的是,如果 UI 缩放到 150%,则将窗口移出屏幕不起作用(尽管偶尔会起作用(。 如果我将窗口移动到{ left: 10000, top: 10000 },窗口最终位于屏幕的右下角。 如果我将其移动到{ left: -10000, top: -10000 },它最终位于左上角。

在 macOS 10.15 上,窗口大部分会移出屏幕,但可以看到一条银子。 所以看起来我遇到了一些特定于操作系统的行为/错误。

有没有办法可靠地在屏幕外移动/隐藏弹出窗口?

没有内置的扩展 API。

解决方法 1:将辅助窗口重新定位在主窗口下。

解决方法 2:通过将辅助窗口state设置为'minimized'来最小化辅助窗口。

解决方法 3:使用 nativeMessaging 运行一个单独的实用程序(您可以使用任何语言编写它,例如 node.js,该实用程序将在所有平台上运行(,该实用程序将使用低级操作系统方法直接操作窗口可见性。

解决方法 4:将 UI 作为 DOM + ShadowDOM 插入页面。

最新更新