如何保持 Google Chrome 扩展弹出窗口打开?

问题描述 投票:0回答:10

如果我打开扩展程序弹出窗口,那么我会打开另一个窗口或选项卡,如果我返回弹出窗口,则弹出窗口后面的窗口或选项卡不会保持打开状态。

有没有办法强制它让弹出窗口保持打开状态?

javascript google-chrome google-chrome-extension
10个回答
54
投票

作为用户,您目前无法强制弹出窗口保持打开状态。这是 UI 团队做出的 UI 决定。如果您想强制进行设置,您可以通过更改弹出图标、在请求时打开新选项卡或用于注册的新弹出视图来显示此设置。

作为开发者,检查弹出窗口,它将保持打开状态。


17
投票

无法阻止 Chrome 弹出窗口关闭,除非您处于开发者模式。不过,您可以考虑这种替代方案:

改为启动普通弹出窗口:

在您的

popup.html
文件中,加载运行此命令的 Javascript 文件:

var popupWindow = window.open(
    chrome.extension.getURL("normal_popup.html"),
    "exampleName",
    "width=400,height=400"
);
window.close(); // close the Chrome extension pop-up

这将在正常的弹出窗口中打开扩展程序中的文件

normal_popup.html
,该窗口在失去焦点时不会关闭。因为 name 参数相同,所以如果用户再次启动
popup.html
,弹出窗口将被重复使用。


11
投票

在此处回答常见问题解答:https://developer.chrome.com/docs/extensions/mv3/faq/#faq-persist-popups

当用户将注意力集中在弹出窗口之外的浏览器某些部分时,弹出窗口会自动关闭。用户点击离开后,无法保持弹出窗口打开。


6
投票

正如其他人所说,这是弹出 UI 的故意限制。

相反,您可以将一些 HTML 注入到页面中,将弹出窗口中所需的内容加载到悬停在现有页面上的元素中。您必须自己实现关闭功能,但它会持续存在。

看看例如

keyframes.app
是如何做到的:https://github.com/mitchas/Keyframes.app/blob/master/Keyframes.app%20(Extension)/src/inject/ui.js


3
投票

如果您在“chrome://flags/#enable-panels”启用面板,您可以使用类似以下内容:

chrome.windows.create({
    url:"popup.html",
    type:"panel",
    width:300,
    height:200
});

打开一个面板窗口,只要您不将其从屏幕底部移动,它就会一直保持在顶部。


3
投票

一个选项是使用此网址打开一个新选项卡,

chrome-extension://<extension-id>/popup.html

其中

<extension-id
是扩展程序的 id。您可以在扩展管理器中找到它。

它因任何原因保持开放。它还在后台脚本中输出

console.log

一个缺点:因为“选项卡”弹出窗口始终打开,所以您可以看到代码从头到尾都在工作。但是,只要您在浏览器的其他位置发生某些事件,“真正的”弹出窗口就会关闭。当它关闭时,popup.js 中的代码立即终止!这就是为什么您会看到“选项卡”和“真实”中存在不同的

console.log
。谨慎使用!


1
投票

此答案如何防止 Chrome 开发人员工具在当前浏览器窗口关闭时关闭?对我的情况非常有帮助:


不是一个完美的解决方案,但您可以通过打开以下位置的复选框在 Window.close 事件上添加断点并卸载:

Developer tools -> "Sources" tab -> Event Listener Breakpoints -> Window -> close

还有

Event Listener Breakpoints -> Load -> unload

尝试标记两者,看看哪一个最适合您


1
投票

解决此问题的最佳方法是:

  • 在弹出窗口内右键单击
  • 点击:检查

或者只需按

CTRL+Shift+I

将使用开发人员工具打开一个新窗口...只需保持该窗口打开,弹出窗口将永远不会关闭。


0
投票

从 Chrome 114 开始,一种替代方案是 SidePanel API:

https://developer.chrome.com/docs/extensions/reference/sidePanel/#type-PanelBehavior

这将在侧面板中打开您的 UI,并在交互和选项卡中保持可见。


0
投票

这些答案都不正确。

例如,适用于 Chrome、Brave 等的 Proton Pass 浏览器扩展。单击密码字段时保持打开状态。即使用户更改活动/聚焦窗口。

这以前可能是一个问题,但现在显然不是问题。

但是,我听说这个问题在这些浏览器的 Linux 实现上仍然存在。此外,我还看到了很多疯狂的解决方法,包括浏览器扩展注入隐藏代码,导致扩展在扩展按钮所在位置的正下方绘制一个没有边框的浮动元素窗口。也就是说,它根本不使用所有其他扩展程序都会使用的传统方式打开下拉菜单。所以事实上有一些方法可以解决这个问题。但是,YMMV 取决于您的浏览器和操作系统。

顺便说一句。火狐浏览器也是如此。 Firefox Proton Pass 是另一个扩展示例,当窗口聚焦在 Windows 上时,该扩展也不会关闭。然而,Linux 上也存在同样的问题,它关闭。

© www.soinside.com 2019 - 2024. All rights reserved.