You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome 66发布后程序化访问popup.html被拦截的扩展测试问题

解决Chrome 66+中扩展Popup页面程序化访问被拦截的问题

针对你遇到的Chrome 66发布后扩展测试用例失败的问题,这是因为Chrome从66版本开始收紧了对扩展页面程序化访问的安全限制,尤其是针对未正确配置固定ID、未打包的扩展,以及跨上下文访问的场景。下面给你几个针对性的解决方案:

1. 确保扩展使用固定ID的打包版本

Chrome 66+对未打包的「开发者模式」扩展的程序化访问做了严格限制,测试时必须使用带固定ID的打包.crx扩展:

  • 始终用同一个PEM密钥文件打包扩展(每次打包复用该文件,扩展ID就会固定不变)
  • 在测试自动化脚本中加载打包好的.crx文件,而非直接加载源码文件夹
  • 验证manifest.json中的key字段是否正确配置为PEM对应的公钥(可从已加载的扩展详情页复制生成的key值)

2. 正确调用chrome.runtime.getURL()获取Popup地址

不要手动拼接chrome-extension://<id>/src/popup.html,而是通过扩展上下文获取合法的URL:

  • 如果测试脚本需要获取这个地址,应该在扩展的背景页或内容脚本中执行chrome.runtime.getURL('src/popup.html'),再把结果传递给测试环境
  • 比如用Chrome DevTools协议的Runtime.evaluate方法,在扩展的背景页上下文执行该调用,避免在测试页面的上下文直接触发(会因权限不足返回错误)

3. 调整扩展的内容安全策略(CSP)

如果测试用例是通过iframe嵌入Popup页面,默认会被Chrome的CSP拦截,需要在manifest.json中针对性放宽(仅用于测试环境):

"content_security_policy": "frame-src 'self' http://localhost:你的测试端口; script-src 'self';"

注意:该配置仅限测试场景使用,生产环境必须严格遵循CSP规则,切勿随意放宽

4. 配置测试Chrome实例的启动参数

确保测试用的Chrome实例启用了必要的权限:

  • 添加--load-extension=/path/to/your/packed.crx加载打包好的固定ID扩展
  • 测试环境临时添加--allow-running-insecure-content(仅用于测试,生产禁用)
  • 若非必要,避免滥用--disable-web-security,但本地测试场景可临时使用

快速调试技巧

  • 在Chrome地址栏直接访问通过chrome.runtime.getURL()获取的Popup地址,看是否能正常打开,以此排查是测试代码问题还是浏览器限制
  • 在扩展管理页(chrome://extensions/)确认扩展ID和你预期的一致,检查key字段是否正确配置

内容的提问来源于stack exchange,提问作者Victoria Chuang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:50:08