从 v38 开始,Chrome 扩展程序无法再从 HTTP URL 加载,解决方法?

Posted

技术标签:

【中文标题】从 v38 开始,Chrome 扩展程序无法再从 HTTP URL 加载,解决方法?【英文标题】:Since v38, Chrome extension cannot load from HTTP URLs anymore, workaround? 【发布时间】:2014-12-04 19:17:37 【问题描述】:

我们网站的用户运行我们的 Chrome 插件,其中包括通过 XMLHttpRequest 执行跨域请求,如 Chrome extension development pages 所述。这几年来一直运行良好。但是,自从我们的用户升级到最新版本的 Chrome (v38) 后,这些请求都失败了。我们的网站在 HTTPS 上运行,并且通过我们的内容脚本加载的一些 URL 是在 HTTP 上的。消息是:

[blocked] 'https://www.ourpage.com/' 处的页面已加载完毕 HTTPS,但运行来自“http://www.externalpage.com”的不安全内容: 此内容也应通过 HTTPS 加载。

发生错误的报告行位于我发出 HTTP 调用的内容脚本中:

xhr.send(null);

我无法控制外部页面,我不想从我们自己的页面中删除 SSL。问题:这是一个错误还是有我不知道的解决方法?

(注意:清单中的权限始终设置为<all_urls>,这已经工作了很长时间。将其设置为http://*/https://*/ 没有帮助。)

【问题讨论】:

关键字“运行不安全的内容”。您如何处理 XHR 响应? 【参考方案1】:

如果可能,请使用该外部页面的 https 版本。

如果不可行,请使用后台页面处理 AJAX 请求 (example)。

【讨论】:

@RobW 我在web_Accessible_resources 中添加了我的背景和 scrip.js 文件,但仍然出现mixed content 错误。 @Volatil3 使用后台页面的方法。我之前的建议不起作用,因为混合内容限制会传播到子框架。 @RobW,您的建议使用后台页面处理 AJAX 请求仍然有效吗?我已经在这里使用 Google Chrome 51 进行了测试,但无法正常工作。 @Franciscocamilo 是的。我在Chrome 52的后台页面做了fetch('http://example.com').then(r => r.text()).then(t => console.log(t)),打印出了example.com的内容。您是否添加了访问您请求内容的网站的权限,包括重定向(如果有)?

以上是关于从 v38 开始,Chrome 扩展程序无法再从 HTTP URL 加载,解决方法?的主要内容,如果未能解决你的问题,请参考以下文章

Chrome无法从该网站添加应用,扩展程序和用户脚本

ubuntu chrome 无法从该网站添加应用,拓展程序或脚本

关于Chrome 67 以后版本无法离线安装扩展的解决方法

如何在网页中调用chrome浏览器里的扩展程序

chrome无法从该网站添加应用扩展程序和用户脚本的有效解决方法!

Chrome扩展程序getUrl无法在注入文件中运行