iphone - 网站在 3G 下的 iPad/iPhone 上显示 JavaScript 错误,但在 WiFi 下则没有

标签 iphone ipad proxy wifi 3g

正在连接到http://www.manage-us.com在 3G 下的 iPad 上 [过去] 会导致 JavaScript 错误,如果启用了开发者控制台,则可以看到该错误。如果在 WiFi 连接下使用同一台 iPad 访问同一页面,则不会显示错误。 [错误现已消失,因为我应用了下面的修复程序!]。

这是为什么?

我尝试在 Mac 上的 Safari 和 Mac 上的 iPad 模拟器上模拟低带宽(使用虚拟网络)。这不会重现该问题。

我目前怀疑这是我的英国移动运营商 (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 - 网站在 3G 下的 iPad/iPhone 上显示 JavaScript 错误,但在 WiFi 下则没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3282373/

相关文章:

iphone - 如何创建一个有光泽的渐变 UIButton

iphone - Command/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang 失败,退出代码为 1

c# - 使用 .NET sslstream 了解服务器/代理/客户端证书

reactjs - 通过代理在 dev 上提供 React 项目

iphone - -[__NSCFDictionary JSONRepresentation] : unrecognized selector sent to instance

ios - 弹出窗口中的 UIReferenceLibraryViewController

iphone - ScrollView 不起作用 IOS 7

c# - 使用 HttpClient 将 Windows 身份验证传递给代理

iphone - 使用 CoreData 创建新闻提要

iphone - "Your Second iOS App": How do I implement a Singleton?