クロスドメインの問題を回避する通常の方法は、タグを挿入することです。 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>
出典
2011-09-30 10:40:15
AHM
私は私のサーバーの用途が言ったようにプロキシーなので、URLコンストラクターでプロキシを指定するHttpURLConnectionを作成すると正常に動作しますが、https接続では問題に直面します。 HttpsURLConnection con =(HttpsURLConnection)url.openConnection();は動作しません.HttpURLConnectionに対してのみ機能します。 だから、どのようにこの簡単なことを達成するには? – user972810
http://stackoverflow.com/questions/1511674/how-do-a-send-an-https-request-through-a-proxy-in-javaが役立つかもしれません。それでも、特に簡単なことはありません。 – alnorth29
URLのopenConnection()によって返されたオブジェクトは、HttpsURLConnectionに型キャストされることはできません。それはHttpURLConnectionにキャストできますが、 HttpsURLConnection connection =(HttpsURLConnection)url.openConnection(); さらに、私はブラウザ側での検証にもっと興味があります。そのため、私はこれらのプロキシ設定を行う必要はありません。 – user972810