3

私は非常に単純なサイドバー ガジェットに取り組んでおり、ルーターの毎月の帯域幅の使用状況を分析し、その月がどれだけ進んでいるか遅れているかを判断しています。データは、ルーターでホストされ、パスワードで保護された Web ページにあります (問題がある場合は、DD-WRT を使用しています)。すべての認証情報とともに Javascript を使用してページ要求をルーターに渡して、ページを一度に取得したいのですが、そのための適切な構文が見つからないようです。何か案は?

これまでの私のコードは次のとおりです。

var ua = navigator.userAgent.toLowerCase();
        if (!window.ActiveXObject){
          req = new XMLHttpRequest();
        }else if (ua.indexOf('msie 5') == -1){
          req = new ActiveXObject("Msxml2.XMLHTTP");
        }else{
          req = new ActiveXObject("Microsoft.XMLHTTP");
        }

        req.open('GET', 'http://192.168.1.1/Status_Internet.asp', false, "username", "password");   
        req.send(null);  
        if(req.status == 200){
           dump(req.responseText);
        } else{
            document.write("Error");
        }

        document.write("Second Error");

req.send(null)Firebug は、具体的に は でエラーをスローすることを示しますAccess to restricted URI denied" code: "1012

同一生成元ポリシーが原因かもしれませんが、その場合、xmlhttpRequest の代わりに何を使用できますか?

4

4 に答える 4

1

これ、同一生成元ポリシーのためです。代わりに iframe を使用できますが、それでは実際に必要なものが得られません。

http-auth の場合、以前はhttp://username:pass@siteでページをリクエストできましたが、長い間それを使用しようとしていないことを認めなければならないので、それが正しいかどうかはわかりませんは引き続きサポートされています。

編集:

これが機能しない場合は、ここで説明されているように基本的な http 認証を使用できます: http://en.wikipedia.org/wiki/Basic_access_authenticationただし、リクエストを操作できないため、サーバー側のプロキシを訴える必要があります。 xhr がオプションでない場合の JavaScript からのヘッダー。

于 2011-03-11T16:47:40.447 に答える
0

Authorizationリクエストにヘッダーを追加する必要があります。私は AJAX の専門家ではないので、AJAX リクエストのヘッダー フィールドを変更できるかどうかはわかりません。できない場合は、運命です。

可能であれば、このウィキペディアの記事には、どのように見えるべきかの例が含まれています。

于 2011-03-11T16:49:38.933 に答える
0

同一生成元ポリシーが問題でない場合は、ページにjQueryをロードします。

jQuery の $.ajax メソッドを使用します。

$.ajax({
  url: "path/to/your/page.html", // self-explanatory
  password:"your password", // a string with your password.
  success: function(data){ // on sucsess:
  $("someDiv").html(data); // load in the retrived page
 }
});

詳細については、jQuery ajax APIを参照してください。

于 2011-03-11T16:52:12.613 に答える
0

これはセキュリティ機能です。ご覧のとおり、同様の手法を使用してルーターをハッキングする悪意のあるスクリプトがあります (ルーターのパスワードを変更するのは誰か? どうやら Joe X. Schmoe ではないようです)。

Same Origin Policyの下では、AJAX リクエストは発信元のドメイン (およびポート) に限定されます。したがって、ローカル ページから 192.168.1.1:80 へのリクエストを行うことはできません。

考えられる回避策があります。ネットワーク内のサーバー側プロキシ (ルーター ページを取得する PHP スクリプトなど) です。

于 2011-03-11T16:59:40.187 に答える