2011-05-20 39 views
7

我有一个使用ASP.NET AJAX和AJAX Control Toolkit的ASP.NET应用程序。该应用程序可以在PC上最新的浏览器上正常运行。它在我的iPad上也能正常工作,至少在第一次访问应用程序时。我发现如果我关闭iPad并稍后返回页面(通过书签或类似内容),则该网站已损坏。我已经缩小了ASP.NET/ASP.NET AJAX问题/错误/限制的失败,并且我正在寻求一些进步的帮助。ASP.NET AJAX将被禁用的原因

使用Fiddler作为iPad的代理服务器时,我在重新打开页面时发现了以下问题。

  1. 我的* .skin文件未正确应用。生成的样式标记根本不包含* .skin文件中指定的一些参数。
  2. 该页面不包含MicrosoftAjaxWebForms.js文件。 (工作时,其发射到的ScriptResource.axd参考右上面的所有ToolkitScriptManager脚本。
  3. 的页面不包括到另一个JS文件的引用开始功能WebForm_FindFirstFocusableChild(对照)
  4. 的页面不包括几个隐藏字段如__LASTFOCUS,__EVENTTARGET和__EVENTARGUMENT
  5. 的页面不使用document.forms [“aspnetForm”]并限定__doPostBack不包括脚本块。
  6. 的页面不包括脚本块执行Sys系统。 WebForms.PageRequestManager._initialize
  7. 其他一些初始化脚本不存在(设置焦点,创建更新进度等)

不知何故,看起来框架决定它不是不需要这些脚本而不会发出它们。由于所有脚本都是相互关联的,因此必须有一个共同的原因。这可能与不包含* .skin属性的原因有关。有任何想法吗?我会想到浏览器的功能,但这只会在后续访问该网站时发生,而不是第一次。

编辑: 绝对看起来像浏览器功能问题。

请求工作: 的User-Agent:Mozilla的/ 5.0(新iPad; U; CPU OS 4_3_3喜欢Mac OS X; EN-US)为AppleWebKit/533.17.9(KHTML,例如Gecko)版本/ 5.0.2

要求所有未: 的User-Agent:Mozilla的/ 5.0(新iPad; U; CPU OS 4_3_3喜欢Mac OS X; EN-US)为AppleWebKit/533.17.9(KHTML,例如Gecko)移动/ 8J2

将尝试在App_Browsers中创建一个自定义文件并返回额外的信息。

+0

可能重复。 NET/iPad的Safari缓存问题?](http://stackoverflow.com/questions/5681122/asp-net-ipad-safari-cache-issue) – NotMe 2011-05-20 14:08:26

+0

你可能会考虑放在你以前的问题赏金以获得更多的眼球 – NotMe 2011-05-20 14:08:44

回答

6

根本问题确实是ASP.NET在全屏模式下加载时将iPad识别为普通下层“Mozilla”而非Safari,。它认为JavaScript不被支持,等等。

该解决方案是将以下内容添加到所有的ASP.NET页面(通过将此页面添加到所有ASP.NET页面派生自基页)。

protected void Page_PreInit(object sender, EventArgs e) 
    { 
     if (Request.UserAgent != null && Request.UserAgent.IndexOf("AppleWebKit", StringComparison.CurrentCultureIgnoreCase) > -1) 
     { 
      this.ClientTarget = "uplevel"; 
     } 
    } 

(我试过创建一个*。因为它不会出现,我可以从内部我自己的参考框架的* .browser文件浏览器文件,但悲惨地失败了。)

+2

或使用此修补程序创建基础页面,并从中获取所有其他文件:) – 2011-05-20 14:49:25

+0

显然,这就是我所做的:)将编辑文本以使其更明显。 – 2011-05-20 14:50:37

+1

我会给你50票,我只是遇到了这个问题,它让我花了几天找到正确的答案。 – Mohgeroth 2012-04-13 17:55:03

1

我通常做这在Global.asax中[ASP的

void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    Request.Browser.Adapters.Clear(); 
} 
相关问题