【问题标题】:Catching 'Blocked loading mixed active content' CORS error捕获“阻止加载混合活动内容”CORS 错误
【发布时间】: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.responseTexte.message 是空字符串(可能是因为 $.ajax 是异步发生的)。我怎样才能捕捉到实际的错误消息:Blocked loading mixed active content...

【问题讨论】:

    标签: javascript jquery ajax firefox cors


    【解决方案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 处理程序已捕获到。
    猜你喜欢
    • 2017-07-05
    • 2014-01-03
    • 1970-01-01
    • 2017-01-23
    • 2018-07-30
    • 2018-12-04
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多