當您包含外部JavaScript文件時,iOS上的Chrome似乎會創建一個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'或其他任何東西。效果是一樣的。 – 2013-02-27 14:25:02
這是一個非常奇怪的行爲,我似乎無法複製到我的本地。我建議的一件事就是在網絡外的Chrome上測試給定的網站(某些插件會中斷js的「正常」工作,即Skype,並且一些網絡提供商也會添加它們的內容)。 – eithed 2013-02-27 14:34:42
@eithed - 我已經在3種不同設備(運行iOS 5的iPhone 3,以及運行iOS 6的iPad 2和iPod Touch)上進行了全新的Chrome安裝測試。他們都是測試設備,沒有不必要的插件。但是,這是所有最新版本的Chrome(23)。 – 2013-02-27 14:36:40