iOSのChromeは、外部のJavaScriptファイルを含めるとXMLHttpRequest
オブジェクトを作成しているようです。このオブジェクトを識別子a
を持つグローバル変数に割り当てて、既にそこにあったものを上書きしているようです。Chromeがグローバルプロパティを食べるのを止めることはできますか?
テストケース:
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
コールがそこになかったので私はこれを最初に気付かなかった。したがって、実際にはのように見えます。常にがページロード後に発生します。
注 - 'document.write'呼び出しはすぐそこにあり、ページに簡単に出力できます。それを 'alert'や' innerHTML'などに変更してください。効果は同じです。 –
これは本当に奇妙な振る舞いです。私は自分の地域では複製できないようです。私がお勧めするものの1つは、ネットワーク外の明確なクロムで特定のサイトをテストすることです(いくつかのプラグインはjsの「通常の」動作を妨げる、つまりSkypeや一部のネットワークプロバイダも同様です)。 – eithed
@eithed - 3種類のデバイス(iOS 5を実行しているiPhone 3、iOS 6を実行しているiPad 2とiPod Touch)でクリーンインストールをテストしました。これらはすべて不要なプラグインのないテストデバイスです。ただし、これはすべて最新バージョンのChrome(23)で行われています。 –