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

有人建议直接使用JavaScript方式(感谢 jack4811(这么简单还问,楼下的告诉他 ( ̄へ ̄|||) ):

 1<html>
 2<head>
 3<script language="javascript">   
 4<!--   
 5function mHref() {   
 6if (screen.width == 1024) location.href = "htm2.htm";   
 7else if (screen.width == 800) location.href = "htm1.htm";   
 8else return(false);   
 9}   
10//-->   
11</script>
12</head>
13<body onload="mHref();">
14</body>
15</html>

或者CSS方式(感谢 **** Miracle(新一代的开山怪)
1、制作一组css文件,分被用于在不同分辨率下的屏幕布局设置
2、根据css文件,设计页面布局
2、在页面加载过程中取得屏幕分辨率(上面已经贴了代码了),然后根据分辨率,重新设定页面元素应该应用的css class。
这个过程中完全不需要服务器代码参与,没有post-back。
另外,要将最佳分辨率下的css模板设置为默认,这样的话可以大大减少重新应用style的可能性。

使用CSS不失为一个办法,就类似asp.net的Theme功能,这样做也会有困难:
如何根据分辨率加载不能的css文件呢?如果一个网站有非常多的页面时,每个文件都需要加入相应的分辨率判定和CSS引导的JavaScript

如果在服务器端采用IHttpHandler或者使用自定义控件,在客户端浏览文件前做出处理,然后由IIS自动处理岂不更好?

以下是我昨晚探索出来的结果,仍需要大力完善,欢迎大家继续探讨。

1、首先按照本贴开头的方法,建立一个GetScreen.aspx取得客户端分辨率并将之赋予Session["ScreenResolution"],同时为了自动转向
在本贴开头所示代码中加入以下关键代码:
string w=Request.Form["WidthPixel"];//得到屏幕分辨率X
string h=Request.Form["HeightPixel"];//得到屏幕分辨率Y
Session["ScreenResolution"]=w+"*"+h;//赋值给Session
//转向(更多相关代码见下)
if(Session["UrlReferrer"]!=null)
{
Response.Redirect(Session["UrlReferrer"].ToString());
}

2、在Global.asax中:

 1<script language="C#" runat="Server">   
 2public static string strUrl;//用于取得用户刚进入时的页面链接 
 3
 4protected void Application_BeginRequest(Object sender,EventArgs e)   
 5{   
 6strUrl=Request.RawUrl.ToString();   
 7}   
 8protected void Application_EndRequest(Object sender, EventArgs e)   
 9{   
10} 
11
12protected void Application_Start(Object sender, EventArgs e)   
13{   
14}   
15protected void Session_Start(Object sender, EventArgs e)   
16{   
17if (Session["ScreenResolution"] == null)   
18{   
19Response.Redirect("/GetScreen.aspx"); //如果未取得客户端浏览器分辨率,则定向到GetScreen.aspx,获取之。   
20}   
21Session["UrlReferrer"] = strUrl;//将最初请求页面放在Session中,以便在第1条所示代码中重定向   
22}   
23protected void Session_End(Object sender, EventArgs e)   
24{   
25}   
26</script>

3、在需要做分辨率处理的页面中:

 1<script language="c#" runat="server">   
 2private string screenWidth;   
 3void Page_Load(Object sender,EventArgs e)   
 4{   
 5if(Session["ScreenResolution"]!=null)   
 6{   
 7screenWidth=Session["ScreenResolution"].ToString().Split('*')[0].ToString();   
 8}   
 9}   
10</script>

这里在

 1<body>区内作示例:   
 2<body background="MyPicture```
 3=screenWidth
 4```.gif" bgcolor="#0000FF" leftmargin="0" marginheight="0" marginwidth="0" topmargin="0">   
 5
 6
 7优点:一次检测,多次使用。   
 8缺点:需要客户端COOKIE的支持,因为使用了Session.   
 9\------------------------------------------   
10备注:   
11\------------------------------------------   
12在上述示例中可以更简化一下,那就是:   
13在第1条中:   
14设置Session["ScreenResolutionX"]和Session["ScreenResolutionY"]:   
15Session["ScreenResolutionX"]=Request.Form["WidthPixel"];//得到屏幕分辨率X并赋值给Session   
16Session["ScreenResolutionY"]=Request.Form["HeightPixel"];//得到屏幕分辨率Y并赋值给Session 
17
18在第3条中直接在<body>区内使用:   
19<body ```.gif"="" background="MyPicture```
20=Session[" bgcolor="#0000FF" leftmargin="0" marginheight="0" marginwidth="0" screenresolutionx"].tostring()="" topmargin="0">
21
22另外:检测分辨率的代码可以更简化一些:   
23//GetScreen.aspx(注:未做仔细调试)   
24<script language="C#" runat="server">   
25public void Page_Load(Object sender, EventArgs e)   
26{   
27if (Request.QueryString["action"] != null)   
28{   
29Session["ScreenResolutionX"] = Request.QueryString["resX"].ToString();   
30Session["ScreenResolutionY"] = Request.QueryString["resY"].ToString();   
31Session["ScreenResolutionD"] = Request.QueryString["resD"].ToString();   
32if(Session["UrlReferrer"]!=null)   
33{   
34Response.Redirect(Session["UrlReferrer"].ToString());   
35}   
36}   
37}   
38</script>
39<html><body>
40<script language="javascript">   
41res = "&resX="+screen.width+"&resY="+screen.height+"&resD="+screen.colorDepth;   
42top.location.href="GetScreen.aspx?action=set"+res;   
43</script>
44</body></html></body></body></body></body>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus