web-dev-qa-db-ja.com

リモートホストからHTTP応答を取得するためのXMLHttpRequest

次のコードが機能しないのはなぜですか Mozillaの例に基づく Firefox3.5.7とChromeで試してみました。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
</body>
  <script>
    var req = new XMLHttpRequest();
    req.open('GET', 'http://www.mozilla.org/', false); 
    req.send();
    if(req.status == 200) {
        alert(req.responseText);
    }
  </script>  
</html>

ブラウザがローカルディスク(file:/// C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html)からhtmlをプルしていることを確認してください

Firefoxでは、次のエラーが発生します。

uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: file:///C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html :: <TOP_LEVEL> :: line 10" data: no]

私は何が間違っているのですか?リモートホストにリクエストを送信し、結果を警告したい(後でdivに追加する)。

10
Maxim Veksler

お使いのブラウザが防止しています クロスサイトスクリプティング 。相対パスを使用する必要があります。そうしないと、ほとんどのブラウザは単にエラーまたは空のresponseTextを返します。

次のStackOverflowの投稿もおそらくあなたの問題に関連しています:

11
Daniel Vassallo

また、file:///...への参照から判断して、ブラウザで直接HTMLテストページを開いたと想定しています。 XMLHttpRequest呼び出しの場合、サーバーからHTMLを提供する必要があります。 xampp( http://www.apachefriends.org/en/xampp.html )のようなものを試して、ローカルサーバーを起動して実行し、http://localhost/XMLHTTP.htmlからテストを実行します。

これは同一生成元の問題を解決しないことに注意してください。ただし、これにより次のコードが機能するようになります。

  <script>
    var req = new XMLHttpRequest();
    req.open('GET', '/myTestResponse.html', false); 
    req.send();
    if(req.status == 200) {
        alert(req.responseText);
    }
  </script>
3
Ryan Joy

セキュリティの問題はありませんか?

おそらくFirefoxはローカルファイルがリモートホストと通信するのを妨げていますか?

ネットの周りを偵察する-これを見つけた。これをスクリプトの先頭に追加してみてください。

try {
  netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) {
  alert("Permission UniversalBrowserRead denied.");
}

これが機能することを保証することはできません。最終的にあなたがやろうとしているのは、ブラウザがプラグインするように特別にコーディングされたセキュリティホールに入るからです(クロスドメインリクエスト)。

ただし、通常はユーザーの裁量でオンにできる特別なシナリオがいくつかあります。

0
Andras Zoltan

ローカルファイルであっても、ドメイン間でリクエストを行うことはできません。

https://developer.mozilla.org/en/Same_Origin_policy_for_JavaScript

を除いて、Webページと同じ制限がない拡張機能を開発しています。

0
CalebD