日历归档 |
|
<< < 2024 - 11 > >> | Su | Mo | Tu | We | Th | Fr | Sa | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
|
|
|
About Me |
|
|
ZhangSichu |
|
Male |
|
32 |
|
ZhangSichu@gmail.com |
|
ZhangSichu@hotmail.com |
|
ZhangSichu.com |
|
weibo.com/zhangsichu |
|
|
|
个人推荐 |
|
|
|
|
分类归档 |
|
|
|
|
My Friends |
|
|
|
|
打开有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; }
|
|
|
|
|
|
|