実際にajaxメソッドを使用する前に、同じオリジンポリシーがURLに適用されるかどうかを確認する「安全な」方法はありますか?これが私が持っているものです:
function testSameOrigin(url) {
var loc = window.location,
a = document.createElement('a');
a.href = url;
return a.hostname == loc.hostname &&
a.port == loc.port &&
a.protocol == loc.protocol;
}
これは、特定のことを実行している(または実行していない)場合に限り、安全で信頼性の高い方法です。
この種の作品ですが、ウィキペディアの記事に基づいた手動の推測のようなものです。
これは、「通常の」状況で完全に機能するはずです。クロスドメインスクリプティングを使用する場合は、変更する必要があります。
document.domain
スクリプトを「foo.example.com」や「bar.example.com」から「example.com」に変更すると、関数testSameOrigin
はfalse
「http://example.com」に戻りますが、実際にはを返す必要がありtrue
ます。
変更を計画している場合はdocument.domain
、スクリプトにそのチェックを追加するだけです。
CORS(上記のリンクを参照)を使用してクロスドメイン通信を許可することを計画している場合は、フォールスネガティブも返されます。ただし、CORSを使用している場合は、通信できるドメインのリストがあり、そのリストをこの関数に追加することもできます。
クロスドメイン許容量を事前にチェックするより良い方法はありますか?jQueryは使用しても問題ありません。
おそらくそうではありませんが、スティーブの答えからコンソールに表示されているのは「オブザーバーのジレンマ」である可能性があります...これらのエラーは、コンソールが他のウィンドウを検査しようとしたために発生したように見えますが、必ずしもスクリプト。
CORSをいじっdocument.domain
たり使用したりしていないと仮定すると、サーバーが使用可能かどうかを判断するために追加のリクエストを行う必要がないため、元のソリューションの方がおそらく優れています。クロスドメインスクリプティングを行っている場合でも、それに対応するために現在持っている関数を変更するのがおそらく最善の策です。