当您包含外部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