2011-09-30 16 views
1

javascriptを使用して外部URLが有効かどうかを確認したいと思います。たとえば、「www.google.com」はtrueを返し、「www.google123.com」はfalseを返す必要があります。javascriptを使用したURLの検証/接続

私がテストによって、この目的のためにAJAXを使用するように考えた:(xmlhttp.readyStateの== 4 & & xmlhttp.statusの== 200)場合、これは、リモート・サーバ(外部URL)のために動作しないようです。私のサーバーはプロキシを使用しているので、私はブラウザのサイドスクリプトを使用して、ユーザーのブラウザプロキシがあればそれを自動的に使用するように計画しました。 「AJAXクロスドメイン」を使用する必要がありますか教えてください私は単にURLを検証したいので、これを達成する方法。 AJAX以外の方法はありますか?

答えて

0

私はこれが不可能であると確信しています。ユーザーのコンテキストで別のドメインのランダムページを呼び出すことを許可したAJAXは、すべてのソートまたはセキュリティホールを開くでしょう。

サーバー側のソリューションを使用する必要があります。

+0

私は私のサーバーの用途が言ったようにプロキシーなので、URLコンストラクターでプロキシを指定するHttpURLConnectionを作成すると正常に動作しますが、https接続では問題に直面します。 HttpsURLConnection con =(HttpsURLConnection)url.openConnection();は動作しません.HttpURLConnectionに対してのみ機能します。 だから、どのようにこの簡単なことを達成するには? – user972810

+0

http://stackoverflow.com/questions/1511674/how-do-a-send-an-https-request-through-a-proxy-in-javaが役立つかもしれません。それでも、特に簡単なことはありません。 – alnorth29

+0

URLのopenConnection()によって返されたオブジェクトは、HttpsURLConnectionに型キャストされることはできません。それはHttpURLConnectionにキャストできますが、 HttpsURLConnection connection =(HttpsURLConnection)url.openConnection(); さらに、私はブラウザ側での検証にもっと興味があります。そのため、私はこれらのプロキシ設定を行う必要はありません。 – user972810

0

クロスドメインの問題を回避する通常の方法は、タグを挿入することです。 imageやscript kanのようなタグは、どのドメインからでもコンテンツを読み込みます。タイプ「text/x-unknown」などのスクリプトタグを挿入し、タグload-eventを聞くことができます。ロードイベントが発生すると、スクリプトタグをページから再度削除できます。

もちろん、探しているファイルが画像の場合は、new Image()とすることができます。そうすれば、イメージを作成するときにイメージが読み込まれるため(イメージをプリロードするために使用できる)、タグを挿入してページを汚染する必要はありません。再度、イメージのロードイベントを待つだけです。

UPDATE

さて、私がここでの結論にジャンプしていそうです。これがどのようにサポートされるかについてのブラウザ間にはいくつかの違いがあります。以下は、IE9と最近のバージョンのFirefox、Chrome、SafariのURLの検証にスクリプトタグを使用する方法の完全な例です。

IEの古いバージョン(少なくともIE8では動作しません)は、明らかにスクリプトタグのロード/エラーイベントを提供しないためです。

script-tagのcontenttypeが空でないか 'text/javascript'に設定されていると、Firefoxは何もロードしません。つまり、このアプローチを使用してスクリプトファイルをチェックするのはやや危険です。任意のコードが私のテストで実行される前に、スクリプトタグが削除されるように思えるが、私は確かにない...

をとにかく、ここのコードです:

<!doctype html> 
<html> 
<head> 
    <script> 
     function checkResource(url, callback) { 
      var tag = document.createElement('script'); 
      tag.src = url; 
      //tag.type = 'application/x-unknown'; 
      tag.async = true; 
      tag.onload = function (e) { 
       document.getElementsByTagName('head')[0].removeChild(tag); 
       callback(url, true); 
      } 
      tag.onerror = function (e) { 
       document.getElementsByTagName('head')[0].removeChild(tag); 
       callback(url, false); 
      } 
      document.getElementsByTagName('head')[0].appendChild(tag); 
     } 
    </script> 
</head> 
<body> 
    <h1>Testing something</h1> 
    <p>Here is some text. Something. Something else.</p> 
    <script> 
     checkResource("http://google.com", function (url, state) { alert(url + ' - ' + state) }); 
     checkResource("http://www.google.com/this-does-not-exists", function (url, state) { alert(url + ' - ' + state) }); 
     checkResource("www.asdaweltiukljlkjlkjlkjlwew.com/does-not-exists", function (url, state) { alert(url + ' - ' + state) }); 
    </script> 
</body> 
</html> 
+0

画像を返さないときにURLの正当性をテストするために画像タグを使用するにはどうすればよいですか?たとえば、は動作しません。有効なURLについては、常にエラー部分に移動します。 他の方法はありますか? – user972810

+0

画像ではない画像を使ってURLをテストすることはできませんが、スクリプトタグを使用することができます。スクリプトタグのタイプを「text/plain」などに設定するだけで、javascriptとして処理しようとはしません。この場合、タグをページに挿入し、そのonloadイベントにコールバック関数を追加する必要があります。リソースが存在する場合、コールバックが呼び出されます。また、リソースが存在しない場合に呼び出されるonerrorにコールバックを追加することもできます。 – AHM

+0

スクリプト "type"タグは "text/tcl"、 "text/javascript"、 "text/vbscript"のような値をとります。 ここで、 は機能しません。アラートはありません。他の提案はありますか? – user972810

関連する問題