Chrome扩展:如何从隐身窗口创建非隐身窗口?
解决Chrome扩展从隐身窗口创建非隐身窗口的问题
可以实现,核心是借助扩展的后台脚本(运行在非隐身全局上下文)来执行创建操作,而非直接从隐身窗口的脚本调用。具体步骤如下:
配置扩展权限与隐身模式策略
在manifest.json中确保以下配置:- 添加
windows或tabs权限,用于操作窗口/标签页 - 设置
incognito为split或spanning(这是扩展能在隐身模式下运行的必要配置,你的扩展应该已经满足,但需要确认)
示例
manifest.json片段:{ "manifest_version": 3, "permissions": ["windows"], "incognito": "split", "background": { "service_worker": "background.js" } }- 添加
调整前端脚本逻辑
不要在隐身窗口的弹窗/内容脚本中直接调用chrome.windows.create,改为给后台脚本发送消息:// 比如弹窗中的按钮点击事件 document.querySelector('#open-btn').addEventListener('click', () => { chrome.runtime.sendMessage({ action: 'openNonIncognito', targetUrl: 'https://www.google.com' }); });后台脚本处理创建请求
在background.js中监听消息,执行创建非隐身窗口的操作:chrome.runtime.onMessage.addListener((msg, sender, sendResp) => { if (msg.action === 'openNonIncognito') { chrome.windows.create({ url: msg.targetUrl, incognito: false }); } });
原理说明
Chrome扩展的隐身窗口脚本会继承当前上下文的隐身状态,直接调用chrome.windows.create会默认创建同模式的窗口。而后台脚本运行在Chrome的主进程上下文,不受隐身模式限制,因此能正确创建非隐身窗口。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

