用window.open在同一个新窗口中访问指定url【IE页面缓存问题】

无数次尝试,拼命搜索查资料,就这么个问题花去整整5小时,残念。。。

好歹现在解决了。

情况如下:

想实现类似于newegg,icson等网上商城的购物车模式,即在选购商品的页面A中,点击某些链接,把商品ID传入购物车页面B中,B页面根据此querystring中包含的ID向购物车容器添加此商品,然后购物车页面刷新到无querystring参数的页面状态下。此后每次在页面A中点击添加购物车链接,B页面始终在同一个标签页/窗口中刷新。

观察newegg的页面源代码,在页面A中的链接,是以js形式的window.open(url,windowName)进行窗口的触发。

可是问题出现:

在IE中,点击A页面中的链接,B页面的标签会闪一下,但是也没不做任何改动。后来在B页面的body中onload事件添加客户端方法后观察,发现每次A页面执行window.open时候B其实会重新load的,只不过不做任何回发postback。

而如果用手头的FF3,Chrome浏览器,则会达到期望效果。

研究了很久,很遗憾根本搜不出任何关于这个症状有用的信息,直到发现浏览器页面缓存的字眼,问题解决。

代码如下:

页面A:

 <script type="text/javascript" >
        function AddToCart(t, Width, Height) {       
            var newwindow = window.open('test.aspx?id=' + t, 'basketlist');
        }    
 </script>

几种调用方法均可,残念啊,在没找到原因之前,啥都尝试过了...

<asp:HyperLink runat="server" NavigateUrl="javascript:AddToCart('a')" Text ="hyperlink" />
<a href ="javascript:AddToCart('a')" >test</a>
<a href ="#" onclick ="AddToCart('a')" >test</a>
<asp:Button id="btnTest" runat ="server" OnClientClick ="AddToCart('a')" />

 

页面B:test.aspx.cs

protected void Page_Load(object sender, EventArgs e)
        {            
            if (!IsPostBack)
            {
                Response.Cache.SetCacheability(HttpCacheability.NoCache);
                Response.Cache.SetNoStore();
                if (Request.QueryString["id"] != null)
                {
                    HttpCookie cookie = Request.Cookies["Cookie"] ?? new HttpCookie("Cookie");
                    cookie.Value = cookie.Value + Request.QueryString["id"];
                    Response.Cookies.Add(cookie);                      
                    Response.Redirect("test.aspx");

                }
            }
            if (Request.Cookies["Cookie"] != null)
                ltTest.Text = Request.Cookies["Cookie"].Value;

        }

 

---

补充材料:

window.open方法的使用和重载

http://www.w3schools.com/HTMLDOM/met_win_open.asp

posted @ 2008-10-02 01:57  BetaGeek™  阅读(1102)  评论(0编辑  收藏  举报