连接到 http://www.manage-us.com在 3G 以下的 iPad 上 [过去] 会导致 JavaScript 错误,如果已启用开发人员控制台,则可以看到该错误。如果在 WiFi 连接下使用同一 iPad 访问同一页面,则不会显示错误。 [错误现在消失了,因为我应用了下面的修复!]。
这是为什么?
我已经尝试在 Mac 上的 Safari 和 Mac 上的 iPad 模拟器上模拟低带宽(使用 dummynet)。这不会重现问题。
我目前怀疑这是我在英国的移动运营商 (O2) 引入的问题,该运营商已知会通过代理缓存修改某些内容,例如降级图像文件。如果您可以确认通过其他移动运营商在 iPad 或 iPhone 上使用 3G 连接时不会遇到此问题,那将很有帮助。
最佳答案
我对此进行了进一步调查,发现问题在于英国移动运营商 O2(Apple 最初的独家 iPhone 运营商)在将网络内容发送到 iPhone 和 iPad 之前对其进行了修改。可能在将其发送到任何运行移动浏览器的设备之前。
它们不确定地将一些 CSS 和 JavaScript 内联到网页的主要源文件中。这可能会由于算法错误或从源文件中剥离空白而导致源文件中的句法错误而产生错误,否则这些错误是良性的。
这些修改还会从受版权保护的 javascript 库和 css 库中删除版权消息,并对交付优化造成严重破坏。
例如,假设用户正在访问您网站上的一系列页面,这些页面都链接到 jQuery 库。 O2 不是让您的移动浏览器在本地缓存库,而是在每个页面上内联库,强制您的手机为每个页面一遍又一遍地加载整个库。
我在这里写了一篇关于这个问题的博客,希望能引起更多关注:http://stuartroebuck.blogspot.com/2010/07/mobile-proxy-cache-content-modification.html
我的解决方法是使用 document.write()
在加载时插入 JavaScript 库依赖项并防止 O2 内联它们。这似乎工作得很好。例如:
<script type="text/javascript">
// <![CDATA[
// Using document.write to load JavaScript dependencies to bypass O2 network inlining of JavaScript.
function loadJS(file){document.write("<" + "script type='text/javascript' src='" + file + "'></" + "script>")}
loadJS("/js/jquery-1.4.2.min.js");
loadJS("/js/myJSLibrary.js");
// ]]>
</script>
请注意,与以往一样,如果页面以 XHTML 形式提供,document.write
将不起作用。
关于iphone - 网站在 iPad/iPhone 3G 下显示 JavaScript 错误,但在 WiFi 下不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26544197/