我在C#中了解了为什么Request.Browser.Crawler始终为假(http://www.digcode.com/default.aspx?page=ed51cde3-d979-4daf-afae-fa6192562ea9&article=bc3a7a4f-f53e-4f88-8e9c-c9337f6c05a0) .
有没有人使用某种方法来动态更新Crawler的列表,所以Request.Browser.Crawler会非常有用吗?
我最近在我的ASP.NET Web应用程序中注意到,如果我将用户代理设置为空字符串(使用FireFox插件来欺骗用户代理),那么ASP.NET将不会生成执行回发所需的javascript.更具体地说,如果您尝试__doPostBack(a, b)从javascript中调用该函数,则会收到错误消息,指出该函数未定义.
我知道每个浏览器都有一个用户代理,所以这通常不会出现,但问题的实质仍然存在:如果你依赖,有些情况下,无法识别或格式错误的用户代理可能会使您的Web应用程序无法使用回发.
这类似于这个问题:ASP.net没有为某些用户代理生成javascript,但如果我正确地阅读它,看起来你会逐个修复每个无法识别的用户代理并将其作为另一个浏览器屏蔽.我对单个用户代理的关注较少,而且总体而言,某些用户代理将无法使用我的应用程序并且我不会知道它,因为错误发生在javascript而不是服务器上.
有谁知道我可以强制ASP.NET始终生成所需的JavaScript的方式?
在运行iOS 6.0的第三代iPad上,在Safari浏览器上运行的ASP.NET Web应用程序中,我很难找到间歇性问题的根源.会发生的情况是,有时,<a>设置为通过JavaScript进行回发的超链接的标签将突然停止工作,如果您在屏幕上触摸它们,它们似乎什么都不做.这些包括设置为注销链接的asp:LinkButton控件,以及设置为允许行排序的GridView的标题行.它背后似乎没有任何押韵或理由 - 它们会正常工作一段时间,然后停止,之后我会注意到它们再次开始工作(主要是在关闭Safari并重新打开它之后,尽管并非总是如此)似乎工作).
注销控件在aspx文件中如下所示:
<asp:LinkButton ID="LogoutButton" onclick="LogoutButton_Click" runat="server">[ Logout ]</asp:LinkButton>
Run Code Online (Sandbox Code Playgroud)
并在生成的HTML中显示为:
<a id="LogoutButton" href="javascript:__doPostBack('ctl00$LogoutButton','')">[ Logout ]</a>
Run Code Online (Sandbox Code Playgroud)
在iPad上运行的Safari是否有任何特殊之处可能会阻止此类链接偶尔中断,例如页面上或其他打开的浏览器选项卡中加载了太多数据,或者ViewState是否在这种情况下起作用?即使在iPad上使用Web应用程序一段时间后,我找不到任何特定的方法来重新创建问题,所以我甚至无法开始尝试修复它,这真的令人沮丧,所以我正在寻找来自那些开发了ASP.NET应用程序并且非常了解iPad和/或Safari环境的人的指导.我从来没有在桌面浏览器上出现过这个问题.
更新:使用本页概述的有关如何在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>
Run Code Online (Sandbox Code Playgroud)
这似乎与Apple支持论坛和SO上描述的问题相同.后者表明,ASP.NET有时可能无法将iPad上的Safari识别为支持JavaScript,因此无法在页面中正确插入__doPostBack功能.我的页面上的其他JavaScript仍然可以正常工作,所以它不能完全解释我的问题.