我正在建立一个网站,除了3G网络上的iPhone外,似乎在所有网络浏览器上都能正常运行。
由于某种原因,它没有正确显示,就像没有解析CSS一样。作为调查的一部分,我在wifi连接中尝试了相同的浏览器(iPhone Safari),页面呈现得很好。
页面是用经典的ASP编写的,有趣的是,如果我从PC浏览器复制渲染的源并给它扩展名为.htm,当你在3G上的iPhone上查看它时就会很好。相同的代码,这与传统的ASP和3G有什么不同,或者可能是移动公司的3G网络阻止特定内容?
我也在诺基亚3G Vodaphone网络上尝试过这种方式,这很好。
所以,我相信这证实iPhone浏览器没有故障,3G网络没有故障,代码没有故障,所以我似乎无法理解问题所在,除了它是一个问题与特定的3G提供商合作。
也许有人之前已经看过这个并且有一个建议/解释可以帮助解决这个问题吗?
答案 0 :(得分:1)
您的3g网络提供商可能会插入代理服务器以提供网页,例如用于缩小图像尺寸。它也可能会在页面中注入一些JavaScript。这些事情可能是你问题的根源。某些iPhone浏览器可让您查看网页的来源,例如iCab移动版,因此您可以从网络提供商处双重检查传送到浏览器的内容。
只是一个猜测......
答案 1 :(得分:0)
经过一番调查,似乎问题的解决方案是在使用外部CSS文件引用时不使用import,3g不喜欢某些服务提供商。
答案 2 :(得分:0)
我跑了一会儿,这是由O2完成的css和javascript压缩引起的,我发现解决方案是向这些文件添加HTTP Header“Cache-Control:no-transform”响应指令。
请参阅:http://stuartroebuck.blogspot.co.uk/2010/08/official-way-to-bypassing-data.html
另见Web site exhibits JavaScript error on iPad / iPhone under 3G but not under WiFi
对于需要在ASP.NET中使用此解决方案的任何人,这将使用URL重写模块2.0 http://learn.iis.net/page.aspx/665/url-rewrite-module-20-configuration-reference为javascript文件设置Cache-Control标头。
<system.webServer>
<rewrite>
<outboundRules>
<rule name="Compression header" preCondition="Match JS Files">
<match serverVariable="RESPONSE_Cache-Control" pattern="(.*)" />
<action type="Rewrite" value="no-transform" />
</rule>
<preConditions>
<preCondition name="Match JS Files">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="(javascript)$" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>