我对此进行了进一步调查,发现问题在于英国移动运营商 O2(Apple 最初的独家 iPhone 运营商)在将 Web 内容发送到 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>
请注意,document.write
如果页面以 XHTML 形式提供,则一如既往地不起作用。