探究客户端浏览器分辨率的自适应问题(如何使网站脚本自动适应客户端分辨率)(1)

今天看到孟子老大的一篇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>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus