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