XMLHttpRequest
外部 JavaScript ファイルを含めると、iOS 上の Chrome はオブジェクトを作成するように見えます。このオブジェクトを識別子を持つグローバル変数に割り当てているようa
で、そこに既にあるものはすべて上書きされます。
テストケース:
HTML ファイル ( test.html ):
<!-- ... --> <script> var a = 1; // Value is not important for this demonstration </script> <script src="test.js"></script> <!-- ... -->
外部 JavaScript ファイル ( test.js ):
setTimeout(function () { document.write(a); // [object XMLHttpRequest] a.onreadystatechange = function () { document.write(a.readyState); // Alternates between "1" and "4" }; }, 100);
はXMLHttpRequest
繰り返し要求を行っているように見え (どこかに... プロキシ経由でデバイス接続をルーティングし、要求を監視しても何も表示されません)、onreadystatechange
イベント ハンドラーが繰り返し実行されます。
いくつかのより多くの観察:
- これは、ページの読み込み後しばらくしてから発生するようです (したがって、
setTimeout
) window.__gchrome_CachedRequest
それが起こるとき、プロパティもあります__gchrome_CachedRequest === a
- 古いバージョンの iOS Chrome では発生していないようです (ただし、どのバージョンで最初に発生したかはわかりません)。
誰もこれに遭遇したことがありますか?それが起こらないようにする方法はありますか(注...名前を変更できませんa
)?なぜこれを行うのか誰かが知っているなら、私は知りたいです。
アップデート
これは、外部スクリプトを含めた場合だけでなく、インライン スクリプトでも実際に発生することに気付きました。setTimeout
そこに電話がかかっていなかったので、最初はこれに気づきませんでした。そのため、ページの読み込み後、実際には常に発生しているように見えます。