0

クライアントでJavaScriptの動作を管理する方法を考えています。

私のHTMLページの上部にあるとしましょう...

<script>

var XMLHttpRequest = function () {
   this.send = function() {
     alert(args.toString());
   }

};

その後、(同じページで)ネイティブXMLHttpRequestオブジェクトにアクセスすることは可能ですか?

(明らかに、セキュリティの観点から、これはXSSを防ぐための最良の方法ではありません-それは問題ではありません)。

4

2 に答える 2

3

XMLHttpRequestはオブジェクトのプロパティであるため、それwindowを介してアクセスできるはずです。

実際には上書きしていません。ネイティブ プロパティをシャドウしているだけなwindowので、宣言のスコープで呼び出そうとするとXMLHttpRequest、オーバーライドされたバージョンがスコープ チェーンで最初に検出され、実行されます。明示的にアクセスwindow.XMLHttpRequestする場合は、オーバーライドされたバージョンをバイパスし、ネイティブ バージョンに直接アクセスします。

var XMLHttpRequest = function() {
   console.log('example');
}
var request = new XMLHttpRequest(); //Calls the above function
var request2 = new window.XMLHttpRequest(); //Calls the native function

キーワードでバージョンを宣言していない場合、var実際にはネイティブ関数をオーバーライドしていることに注意してください。その場合、新しいプロパティを削除することで元に戻すことができます (ただし、Internet Explorer ではできません)。

delete window.XMLHttpRequest;

編集

上記が少し誤解を招くことに気づきました。キーワードを省略した場合var、元の関数を実際に上書きすることはなく、単にそれを隠しているだけです。これは、元の関数がwindowコンストラクターのプロトタイプで宣言されているためです。

于 2012-05-02T08:29:47.860 に答える
0

FF12 では、これは完全に有効なオーバーライドです。その後、XMLHttpRequest は使用できなくなります。

他のブラウザーは、その方法ではアクセスできない可能性がある他の方法を使用することに注意してください。私はそれらをテストしていません。

編集:IE9でもテストされましたが、XHRはそこでも機能しませんでした。

于 2012-05-02T08:28:48.013 に答える