学习问题参考/解决/保留

自我控制应当成为生活的基调, 美好生活是理性来指导的并且紧紧抓住崇高的理想, 人的一生,就是进行尝试,尝试得越多,生活就越美好!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1:问题现象

弹出的模态框,回传以后页面的Title丢失了。

两个页面father.html 里面有个按钮,按一下,弹出Child.html模态框,代码如下:

<!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head>

<title>i'm father</title>

</head>

 

<body>

<input type="button" value="popIt" onclick="window.showModalDialog('Child.html')");">

</body>

</html>

Child.html页面,里面有个按钮,让页面自己提交自己,代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head>

<base target="_self" />

<meta http-equiv="Expires" content="0" >

<meta http-equiv="Cache-Control" content="no-cache" >

<meta http-equiv="Pragma" content="no-cache" >

<script language="javascript"> 

</script>

<title>I'm Poped!</title>

</head

<body>

<form name="form1" method="post" action="Child.html">

<input type="submit" name="Button1" value="Button" id="Button1" />

</form>

</body>

</html>

 

2:bug再现:

单单打开child.html页面点击按钮,tilte正常,并不会丢失.

father.html弹出child.html,这时候tilte也是正常的.点击child页面里面的按钮,这时候发现title丢失了.

3:分析

从页面上看,各个页面都是没有问题的,但是问题出现在什么地方呢?其实问题就出在title语句出现的位置.不知道这个算不算IEbug,<head><title>之间出现其他语句元素的时候,就会造成title回传丢失的现象.child.html页面的<title>I'm Poped!</title>这句话,放在紧跟着<head>之后,发现问题就解决了.

 

4:还有一些问题.

到这里好像问题都已经解决了,可是当你的网站用到StyleSheetTheme来布置主题的时候的时候,就会发现问题又来了.弹出窗口title依然会丢失.这时候你会发现问题大了,因为模态框是不运行用鼠标右键和查看源代码的,也许你和一开始的我一样,心想用JavaScript代码把源码打出来看不就行了吗?可惜document.documentElement.innerHTML并不想我们想想中的那么有效,它总是把老的源码或者稍微有些修改后的源码呈现给我们.这时候我们可以用一个小软件来帮我们完成这个任务,它就是httpwatch,其实这个是一个监视http数据的一个小工具,但是利用它,我们也可以查看到网站的源代码.安装它以后,ie会多一个图标,点下图标会出现它的操作页面.如图:

这个软件可以到我的blog上去下载(http://justinyoung.cnblogs.com)

当你点击Record按钮的时候,它就开始监视所有的http动作,并能跟踪到关联的文件.通过content tag我们可以看到关联文件的源代码.

让我们来看看为什么title会丢失吧.只要看看这段代码就知道该死的StyleSheetTheme给我们的网页做了什么.

<head><link href="../App_Themes/SRBTheme/GridView.css" type="text/css" rel="stylesheet" /><link href="../App_Themes/SRBTheme/MasterPage.css" type="text/css" rel="stylesheet" /><title>

I'm Poped!

</title>

没错,它在<head><title>之间加入了引用样式表的代码,正是这个介入<head><title>之间的代码导致我们的模特框丢失了title.

问题来了,我们到底要怎么处理这个问题呀.其实当你看到这篇文章的KeyWord的时候就应该知道了.不要用StyleSheetTheme属性来布置主题,而是用Theme来布置主题.这样它就会讲引入样式表的文件加到</head>之前.问题也就随之消失了.

顺便谈谈我感觉的StyleSheetThemeTheme的区别吧.

最明显的区别是StyleSheetTheme可以在设计模式的时候就能体现出来,Theme是不能的.

StyleSheetThemeTheme的第二个区别是,css样式表的覆盖上.StyleSheetTheme会强行覆盖css样式表,Theme则是优先css样式表.

最后一点就是这篇文章讲到的啦.css样式表引入代码的插入位置.

 

在发现这点之前,我们还想过一个方法.就是将body之间的东西用updatapanel包起来,这样对head之间就不会有影响(因为title第一次显示是正常的,只有在回传之后才会消失).具体行不行,你们自己试验一下吧.