今天看到孟子老大的一篇E文,关于服务器端如何得知客户端浏览器分辨率的文章,经简化改为如下: <%@ Page language="c#" EnableViewState = "false" debug="true" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>检测客户端显示器分辨率</title> <META http-equiv="Content-Type" content="text/html; charset=gb2312"> <meta content="检测客户端分辨率" name="Description"> <Script language="c#" runat="server"> void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 System.Web.UI.WebControls.Button Button1 = new System.Web.UI.WebControls.Button(); if(!IsPostBack) { System.Web.UI.HtmlControls.HtmlInputHidden btnW = new System.Web.UI.HtmlControls.HtmlInputHidden(); System.Web.UI.HtmlControls.HtmlInputHidden btnH = new System.Web.UI.HtmlControls.HtmlInputHidden(); Button1.ID = "Button1"; btnW.Name = "WidthPixel"; btnW.ID = "WidthPixel"; btnH.Name = "HeightPixel"; btnH.ID = "HeightPixel"; this.FindControl("browserpeek").Controls.Add(btnW); this.FindControl("browserpeek").Controls.Add(btnH); this.FindControl("browserpeek").Controls.Add(Button1); string scriptString = ""; scriptString += "document.all.browserpeek.WidthPixel.value=window.screen.width;\r\n"; scriptString += "document.all.browserpeek.HeightPixel.value=window.screen.height;\r\n"; this.RegisterOnSubmitStatement("Meng", scriptString); this.MyBody.Attributes.Add("onload", "document.all."+Button1.ClientID+".click();"); } else { this.MyBody.Attributes.Remove("onload"); if(this.FindControl("browserpeek").Controls.Contains(Button1)) { this.FindControl("browserpeek").Controls.Remove(Button1); Button1.Dispose(); } System.Text.StringBuilder strLabel = new System.Text.StringBuilder(); HttpBrowserCapabilities bc = Request.Browser; strLabel.Append("您的浏览器的分辨率为:"); strLabel.Append(Request.Form["WidthPixel"]); strLabel.Append("×"); strLabel.Append(Request.Form["HeightPixel"]); Label1.Text = strLabel.ToString(); } } </Script> </HEAD> <body id="MyBody" runat="server"> <form id="browserpeek" runat="server" name="browserpeek"> <asp:label id="Label1" runat="server"></asp:label> </form> </body> </HTML>
其原理是:当客户端打开网页时,自动点击“模拟按钮”,根据客户端浏览器的分辨率反馈给服务器后再由服务器返回。
现在我的目的是想将此脚本放在Global.asax的: protected void Session_Start(Object sender, EventArgs e) { //就是这里了 } 让每个访问者一旦进入网站,首先检测一个Session["ScreenWidthPixel"]和Session["ScreenHeightPixel"]如果有此值,则不再做检测浏览器的步骤而直接进入自动适应的网页。否则进入浏览器的分辨率检测,然后将结果赋值给Session["ScreenWidthPixel"]和Session["ScreenHeightPixel"]。
问题来了: 1、如果有网页已经含<form runat="server" id="....">时,上述办法不可行。因为asp.net中只允许一个<form runat="server" ...>,按上述原理进行提交服务器的话,如果网页还有其他提交也必定造成负面影响。 2、还有一个办法,就是采用Server.Transfer或Response.Redirect("GetScreen.aspx"),但也会造成一定的负页影响,比如:需要返回原来页面的问题。 3、考虑使用IHttpHandler?
欢迎大家都来讨论讨论,一定都用得上。因为现在的浏览器类别实在太多了,需要找到一个较好的解决方案。 
|