iPad上的Safari偶尔也无法识别ASP.NET回发链接

iPad上的Safari偶尔也无法识别ASP.NET回发链接,第1张

概述在运行iOS 6.0的第三代iPad上,在Safari浏览器上运行的ASP.NET Web应用程序中,我很难找到间歇性问题的根源.会发生什么,有时,< a>设置为通过JavaScript进行回发的超链接的标签将突然停止工作,如果您在屏幕上触摸它们,它们似乎什么都不做.这些包括设置为注销链接的asp:LinkBut​​ton控件,以及设置为允许行排序的GridView的标题行.它背后似乎没有任何押韵 在运行iOS 6.0的第三代iPad上,在Safari浏览器上运行的ASP.NET Web应用程序中,我很难找到间歇性问题的根源.会发生什么,有时,< a>设置为通过JavaScript进行回发的超链接的标签将突然停止工作,如果您在屏幕上触摸它们,它们似乎什么都不做.这些包括设置为注销链接的asp:linkBut​​ton控件,以及设置为允许行排序的GrIDVIEw的标题行.它背后似乎没有任何押韵或理由 – 它们会正常工作一段时间,然后停止,之后我会注意到它们再次开始工作(主要是在关闭Safari并重新打开之后,尽管并非总是如此)似乎工作).

注销控件在aspx文件中如下所示:

<asp:linkbutton ID="logoutbutton" onclick="logoutbutton_Click" runat="server">[ logout ]</asp:linkbutton>

并在生成的HTML中显示为:

<a ID="logoutbutton" href="JavaScript:__doPostBack(&#39;ctl00$logoutbutton&#39;,&#39;&#39;)">[ logout ]</a>

在iPad上运行的Safari是否有任何特殊之处可能会阻止此类链接偶尔中断,例如页面上或其他打开的浏览器选项卡中加载了太多数据,或者VIEwState是否在这种情况下起作用?即使在iPad上使用Web应用程序一段时间后,我找不到任何特定的方法来重新创建问题,所以我甚至无法开始尝试修复它,这真的令人沮丧,所以我正在寻找那些开发了ASP.NET应用程序并且非常了解iPad和/或Safari环境的人的指导.我从来没有在桌面浏览器上出现过这个问题.

更新:使用this page上概述的关于如何在iPad上向Safari添加伪视图源选项的技巧,我现在能够看到回发链接正在工作的页面生成的HTML与页面的不同之处在哪里它停止了.简而言之,ASP.NET通常在页面中嵌入的__doPostBack JavaScript函数……由于某种原因停止嵌入.因此,绑定到链接的JavaScript只会出错.以下是ASP.NET通常添加到页面以使回发链接工作的内容:

<script type="text/JavaScript">//<![cdaTA[var theForm = document.forms['form1'];if (!theForm) {    theForm = document.form1;}function __doPostBack(eventTarget,eventArgument) {    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {        theForm.__EVENTTARGET.value = eventTarget;        theForm.__EVENTARGUMENT.value = eventArgument;        theForm.submit();    }}//]]></script>

这似乎与Apple support forum和here on SO中描述的问题相同.后者表明ASP.NET有时可能无法将iPad上的Safari识别为具有JavaScript功能,因此无法在页面中正确插入__doPostBack功能.我的页面上的其他JavaScript仍然可以正常工作,所以它不能完全解释我的问题.

解决方法 在Stack Overflow上找到 this question并遇到几乎相同的问题后,我运行了Stephen建议的 browserCaps output page,并发现Safari在iPad主屏幕上的链接以全屏模式运行时,在我们的ASP.NET服务器上显示为通用,没有功能浏览器.我在其他问题中应用了Avada Kedavra建议的修复,其中包含:

<browserCaps userAgentCacheKeyLength="256" />

…进入< system.web>我的web.config文件的一部分,还有:

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

在正在执行的主网页的代码隐藏文件中. Jason Kealey,该另一个人的修复源,也在他的调查结果的评论部分中建议,将它添加到ASP.NET Web应用程序的App_browsers文件夹中的.browser文件中也可能会有所帮助:

<browsers>  <browser refID="Mozilla" >    <capabilitIEs>      <capability name="cookies"  value="true" />      <capability name="type" value="Uplevel" />    </capabilitIEs>  </browser>  <browser refID="Default">    <capabilitIEs>      <capability name="cookies" value="true" />      <capability name="type" value="Uplevel" />    </capabilitIEs>  </browser></browsers>

编辑:
我将此修复程序应用于我的应用程序,但它打破了其他区域,特别是,它将Chrome和Safari识别为“高级”,这导致它在其他区域被检测为“IE”.下面的代码使得此修复仅适用于未在用户代理中标识为Safari的IDevices:

string ua = Request.UserAgent;if (ua != null    && (ua.IndexOf("iPhone",StringComparison.CurrentCultureIgnoreCase) >= 0    || ua.IndexOf("iPad",StringComparison.CurrentCultureIgnoreCase) >= 0    || ua.IndexOf("iPod",StringComparison.CurrentCultureIgnoreCase) >= 0)    && ua.IndexOf("Safari",StringComparison.CurrentCultureIgnoreCase) < 0){    this.ClIEntTarget = "uplevel";}
总结

以上是内存溢出为你收集整理的iPad上的Safari偶尔也无法识别ASP.NET回发链接全部内容,希望文章能够帮你解决iPad上的Safari偶尔也无法识别ASP.NET回发链接所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1085904.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存