我知道一般在ASP:Menu vs.WebKit问题上有很多帖子,但是我找不到一个可以回答我的问题的帖子。
我经常看到人们推荐两种不同的方法来解决Apple WebKit浏览器(即Chrome,Safari)中的ASP:Menu
问题。但是哪个更好呢?除了目标用户代理,这两个操作之间有什么区别?我发现的唯一区别是,第二个也将在Page_Load
事件上起作用。我假设一个在客观上要优于另一个,但我不知道它们之间的区别。他们每个人如何工作?
两者都进入基础页的Page_PreInit()
方法。
1.清除浏览器适配器。
if (Request.UserAgent.Contains("AppleWebKit"))
{
Request.Browser.Adapters.Clear();
}
2.更改客户目标。
if (Request.UserAgent.Contains("Safari"))
{
Page.ClientTarget = "uplevel";
}
Google Chrome的默认用户代理如下。它同时包含Safari和WebKit,因此我怀疑目标用户代理是否存在重大差异。
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.X.Y.Z Safari/525.13.
最佳答案
好吧,我自己解决了这个问题,因为其他人显然都不知道。实际的答案是ASP.NET将使用WebKit的浏览器识别为“下级”浏览器,这意味着它们无法处理现代HTML或JavaScript。为了补偿,ASP.NET使用“适配器”以不同的方式呈现菜单标记。
在情况2(更改客户端目标)中,客户端被强制识别为"uplevel"
浏览器。因此,菜单将正常显示,就像Internet Explorer或FireFox一样。
在情况1(清除浏览器适配器)中,仍然将客户端视为低端客户端,并且已插入适配器以补偿所谓的旧浏览器,但是在使用该浏览器之前,必须先清空所有适配器。
因此,我认为从技术上讲方法2更好,因为
在使用适配器之前,它可以有效地停止低级别的浏览器补偿。
如果在应用程序的其他地方使用了事实,它将正确地将浏览器识别为高级。
它不会清除适配器,用户可以合法地将其用于其他目的。
正如我在问题陈述中所说的那样,它可以在Page_Load
方法上使用,而不是在Page_PreInit
方法上使用,从而可以将其添加到母版页中,而无需继承的基础页。
关于asp.net - 这些WebKit ASP:Menu修复之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5505433/