捕获“阻止加载混合活动内容”CORS 错误
Posted
技术标签:
【中文标题】捕获“阻止加载混合活动内容”CORS 错误【英文标题】:Catching 'Blocked loading mixed active content' CORS error 【发布时间】:2013-12-31 12:12:30 【问题描述】:在 Firefox 中,当 javascript 尝试从托管在 https
上的页面向 http
服务器发出 CORS 请求时,它会抛出错误:
Blocked loading mixed active content
我想捕捉这些错误,但我不知道如何捕捉。例如,我用 jQuery 尝试过这样的事情:
try
$.get("http://public.opencpu.org/ocpu/library/").fail(function(xhr, err)
console.log("Server error:" + xhr.responseText);
);
catch(e)
console.log(e.message);;
但是 xhr.responseText
和 e.message
是空字符串(可能是因为 $.ajax
是异步发生的)。我怎样才能捕捉到实际的错误消息:Blocked loading mixed active content...
【问题讨论】:
【参考方案1】:您无法捕捉到确切的消息。它只会记录到控制台,但对用户不可用。
当使用普通 XHR 时,.open()
调用将引发具有 .result === 0x805e0006
的异常。此外,ex.toString()
将包含 nsresult: "0x805e0006 (<unknown>)"
。
jQuery,将ex.toString()
放入jqXHR
的.statusText
,因此您可以对由于混合内容而阻塞的请求进行以下检查:
xhr.statusText.indexOf('nsresult: "0x805e0006 (<unknown>)"') > -1
对于好奇:0x805e0006
应该是 NS_ERROR_CONTENT_BLOCKED
(C++ 宏值)。
【讨论】:
所以你的意思是 $.ajax 调用需要用一个被阻止的字段来增强。 我在 jquery 中找到了调用 xhr.open 的代码行。在 chrome 中,我没有遇到异常。相反,异常记录在 xhr.send() 上,但 xhr.statusText 保持为空。【参考方案2】:您应该能够通过使用协议相对 URL 首先防止错误:
$.get("//public.opencpu.org/ocpu/library/")
根据您的页面上下文使用 http 或 https。 public.opencpu.org 两者都支持,所以没问题。
【讨论】:
我知道,但这不是这里的问题。用户要指定 URL。 @Jeroen 在您的问题中提及这会很有帮助。无论如何,给定任意 URI,你如何确保 URI a) 支持和 b) 首先允许来自你的 CORS 请求? 我不知道,但fail
处理程序已捕获到。以上是关于捕获“阻止加载混合活动内容”CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 https 修复 css 和 js 的“阻止加载混合活动内容”
Safari 中的“不允许请求资源”和 Firefox 中的“阻止加载混合活动内容”。 Chrome 中的完美功能