There can be no Triumph without Loss,No Victory without Suffering,No Freedom without Sacrifice.
All you have to decide is what to do with the time that is given to you.
Get busy Living, or Get busy Dying?
  首页 | 留言给我 | 订阅 Rss | CLI | 黄白之恋 Posts:158   Hits: 5544971    Comments: 173    
 日历归档
<<  <  2024 - 11  >  >>
SuMoTuWeThFrSa
     12
3456789
10111213141516
17181920212223
24252627282930
 About Me
 Name: ZhangSichu
 Sex: Male
 Age: 32
 Email: ZhangSichu@gmail.com
 MSN: ZhangSichu@hotmail.com
 Home: ZhangSichu.com
 WeiBo: weibo.com/zhangsichu
 个人推荐
 分类归档
  ·C++/C(5)  RSS
  ·软件工程(1)  RSS
  ·杂事/随感(26)  RSS
  ·.Net/Java(30)  RSS
  ·面向对象程序设计(5)  RSS
  ·汇编/破解(0)  RSS
  ·平面设计(3)  RSS
  ·SQL(5)  RSS
  ·COM/COM+(2)  RSS
  ·Web开发(81)  RSS
 My Friends
Back Forward Refresh Home 2024年11月22日 星期五 RSS CLI Mine Sweeper. In Javascript.

  打开有Iframe结构的新窗口不显示实际地址F5刷新问题
字体大小 [ ]

LeyserWeb中的每一个WebPage都继承自LeyserXXXFramework的BasePage。然后放在Default.aspx的mainframe中。Default.aspx页面中有hearderFrame,mainFrame和footerFrame形成一个Frameset。没有其它别的的东西,Default.aspx就只有个页面展示的框架。 当在mainFrame的Page中点击连接转入新的页面时,导航栏上的地址不会变还是Default.aspx。点F5刷新没有问题,是刚刚新转入的页面,点History的Back回去,正常到原来的页面,点F5刷新没有问题。但是有时候要求点这个Link是出个新窗口,要求target="_blank",不是原本的普通页面跳转。这样弹出的新窗口没有Default.aspx外面Frameset。外观上看上去失去了统一风格。由于每个业务Page都是从BasePage继承的,它不能写自己的Frame外观。整体的Frame外观由WebFramework统一管理。在这种情况下WebFramework的Default.aspx自我调度和管理。这个打开的页面Link的herf也变成了xxx/xxx/default.asp?url=CommodityDetail.aspx。CommodityDetail.aspx是想要新打开的页面。如果普通转到新页面href="xxx/xxx/CommodityDetail.aspx",如果是在新窗口打开"href="xxx/xxx/default.asp?url=CommodityDetail.aspx" target="_blank"。Default.aspx中判断处理url参数,设置mainFrame.src。

Default.aspx的Page_Load中作的操作:
if(!IsPostBack){
if(Request.QueryString["url"]!=null){
...
    取得url;
设置mainFrame.src = url;
    把url存在Session SaveCurrentUrl(url);
回跳到Default.aspx Response.Redirect("~/Default.aspx");
    }
else{
if(Session中有currentUrl)
     取得currentUrl;
设置mainFrame.src = currentUrl;
else
设置mainFrame.src = Homepage.aspx; Homepage.aspx是默认的首页。
    }
  }


Response.Redirect("~/Default.aspx")后地址栏是Default.aspx。当点F5刷新后,Default.aspx从session中取得currentUrl设置mainFrame.src。页面没有问题。但是当开两个或多个新窗口时,刷新一个比较早开的新窗口,这个窗口会Load成最后开的窗口的内容,而不是自己原本的内容。因为这时Default.aspx中的currentUrl一直记录着最后开的页面的url。并且地址栏也一直显示为Default.aspx。在这种情况下F5刷新早开的新窗口,内容就Load错了。

最开始用hiddenFiled id="ClientUrl"在document.onunload时用javascript记录自己的location.href。当F5时送给服务器。取得currentUrl的方法从Request.QueryString["url"]改为Request["ClientUrl"]。可是发现F5时一般是用Get。当前一次有Submit时F5才是Post,hiddenFile才发回到后台。hiddenFiled不是每次都发回来。

改成了Cookie解决了问题。Cookie每次都会发回到服务器。
  1.用javascript记录本页面的实际url.
String.prototype.endWith = function(endString){
if(this.length=0)return false;
return this.indexOf(endString,0) + endString.length == this.length;
}
function setCurrentPage(){
var href = window.location.href.toString().toLowerCase();
if(!(href.endWith("includes/activate.aspx") ||href.endWith("includes/header.aspx") ||href.endWith("includes/footer.aspx"))){
   window.top.document.cookie = "FWK_CurrentPage = " + window.location.href;
   }
   }
window.onunload = setCurrentPage;

2.服务器存取Session改为了存取Cookie.
public void SetCurrentPage(string url)
{
if(System.Web.HttpContext.Current.Response.Cookies["FWK_CurrentPage"]!=null)
System.Web.HttpContext.Current.Response.Cookies.Remove("FWK_CurrentPage");
System.Web.HttpContext.Current.Response.Cookies.Add(new System.Web.HttpCookie("FWK_CurrentPage", url));
}

public string GetCurrentPage()
{
if(System.Web.HttpContext.Current.Request.Cookies["FWK_CurrentPage"]!=null)
{
return System.Web.HttpContext.Current.Request.Cookies["FWK_CurrentPage"].Value;
}
return string.Empty;
}
  Posted @ 4/1/2007 4:16:16 PM | Hits (63977) | Comment (0

  Post Comment
标题 *
作者 *
密码 记住我
评论 *
    


Stable in Firefox 1.5 2.0Stable in IE6 IE7Stable in MozillaStable in Netscape
ZhangSichu.com V0.1.7507
Powered By ZhangSichu
Copyright © ZhangSichu
Download ZhangSichu.com source code. Download source code