2013-12-12 45 views
7

在Firefox中,JavaScript時試圖做一個CORS請求,從上https託管頁面的http服務器,它會拋出一個錯誤:追趕「阻止裝載混合活動內容」 CORS錯誤

Blocked loading mixed active content 

我想抓住這些錯誤,但我不知道如何。 E.g.I試圖像這樣使用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);; 
} 

但buth xhr.responseTexte.message是空字符串(可能是因爲$.ajax異步發生)。我怎樣才能捕捉到這樣的實際錯誤信息:被阻止的加載混合活動內容...

回答

3

您無法捕捉到確切的消息。它只會記錄到控制檯,但對用戶不可用。

當使用普通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++的宏值) 。

+0

所以你在說的是$ .ajax調用需要使用阻止字段來增強。 – Rhyous

+0

我在jquery中找到了一行代碼,其中調用了xhr.open。在鉻,我沒有得到一個例外。相反,xhr.send()會記錄異常,但xhr.statusText保持爲空。 – Rhyous

0

您應該能夠通過使用相對協議網址,以避免在首位的錯誤:

$.get("//public.opencpu.org/ocpu/library/") 

使用http或https,這取決於你的頁面內容。 public.opencpu.org支持,所以沒有問題。

+0

我知道,但這不是問題。用戶需要指定URL。 – Jeroen

+0

@Jeroen在你的問題中提到這很有幫助。無論如何,給定任意的URIs,你如何確保URI a)支持並且b)允許來自你的CORS請求呢? – janfoeh

+0

我不這樣做,但那是'失敗'處理程序捕獲的。 – Jeroen