2013-12-12 4 views
7
Firefoxでは

は、Javascriptをhttps上でホストされているページからhttpサーバにCORS要求を行うことをしようとしたとき、それはエラーがスローされますCORSエラー「ブロックされたロードがアクティブコンテンツを混ぜ」私はこれらのエラーをキャッチしたいですが、私はどのように把握することはできません。 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()コールでは、という例外が発生します。またex.toString()にはnsresult: "0x805e0006 (<unknown>)"が含まれます。あなたが原因混在したコンテンツにブロックされた要求のために、次のチェックを行うことができるように

jQueryのは、jqXHR.statusTextex.toString()を置く:好奇心のために

xhr.statusText.indexOf('nsresult: "0x805e0006 (<unknown>)"') > -1 

を:0x805e0006NS_ERROR_CONTENT_BLOCKED(C++マクロ値)でなければなりません。

+0

あなたが言っていることは、ブロックされたフィールドで$ .ajax呼び出しを強化する必要があるということです。 – Rhyous

+0

xhr.openが呼び出されたjqueryでコード行が見つかりました。クロームでは、私は例外を取得していません。代わりに、例外はxhr.send()に記録されますが、xhr.statusTextは空のままです。 – Rhyous

0

あなたは、プロトコル相対URLを使用することにより、最初の場所でエラーを回避することができるはずです。

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

は、ページのコンテキストに応じて、HTTPまたはHTTPSのいずれかを使用しています。 public.opencpu.orgは両方をサポートしているので、問題はありません。

+0

私は知っていますが、それはここでは問題ではありません。ユーザーはURLを指定します。 – Jeroen

+0

@Jeroenそれはあなたの質問に言及すると有益でした。とにかく、任意のURIが与えられた場合、URI a)がサポートし、b)あなたからのCORS要求が最初に許可されることをどのように保証しますか? – janfoeh

+0

私はそうではありませんが、それは 'fail'ハンドラによって捕まえられています。 – Jeroen