2013-07-20 15 views
8

私はこのコードを試していますが、私にはDOM例外があります。私はそれをプレーンなJavascriptを使って関数から真偽の "答え"を得るために必要とします。クロスドメインのURLがjavascriptで404になるか確認してください

var url = 'http://www.google.com/'; 
function UrlExists(url) 
{ 
    var http = new XMLHttpRequest(); 
    http.open('HEAD', url, false); 
    http.send(); 
    return http.status!=404; 
} 
UrlExists(url); 

FIDDLE

私はSO答えるthisからこのコードを得たが、私はそれが働いて得ることができない...

+2

このメソッドは、同じ起点ポリシーのcozを動作しません。 URLが存在するかどうかを確認するには、サーバー側コンポーネントを使用する必要があります。 1つのオプションは、この回答のようにYQLを使用しています:http://stackoverflow.com/a/13041787/133198 – vsr

+0

@vsr、アイデアをありがとうございます。これを行うクライアント側の方法はありますか? – Rikard

+1

クライアント側は、 'url'のホストがCORS(http://www.html5rocks.com/ja/tutorials/cors/)をサポートしている場合にのみ可能です。多くのサイトがCORSをサポートしていないため、クライアント側のソリューションは簡単ではありません。 – vsr

答えて

0

クロスドメインは、任意のステータスコードを与えるものではありません言ったように。ステータスコードは、サーバがyesまたはnoで応答したときにサーバから受信されるコンテンツの一部です。クロスドメインサーバの場合は、要求に応答しないでください。

コードの2番目の間違いは、待ち時間や成功イベントなしでステータスコードを直接取得できないことです。関数内のreturn文は、ajaxリクエストに対するサーバの応答まで待たずに、それに依存することはできません。

+0

http.openにはasyncパラメータがあり、falseに設定されていると、send()は応答の終わりまで戻りません。しかし、それはメインスレッドで実行するように提案されていません。 – Valen

関連する問題