zoukankan      html  css  js  c++  java
  • window.opener

    window.opener 实际上就是通过window.open打开的窗体的父窗体。

    比如在父窗体parentForm里面 通过 window.open("subForm.html"),那么在subform.html中 window.opener

    就代表parentForm,可以通过这种方式设置父窗体的值或者调用js方法。

    如:1,window.opener.test(); ---调用父窗体中的test()方法

        2,如果window.opener存在,设置parentForm中stockBox的值。

        if (window.opener && !window.opener.closed) {

           window.opener.document.parentForm.stockBox.value = symbol;

    }

    1>window.opener 的用法

    在一般的用法中,只是用来解决关闭窗口时不提示弹出窗口,   而对它更深层的了解一般比较少。其   实   window.opener是指调用window.open方法的窗口。      在工作中主要是用来解决部分提交的。这种跨页操作对工作是非常有帮助的。 如果你在主窗口打开了一个页面,并且希望主窗口刷新就用这个,打开页面的window.opener就相当于 主窗口的window。

    主窗口的刷新你可以用 window.opener.location.reload(); 如果你用虚拟的目录:如struts的*.do会提示你重试

    你可以改成这样 window.opener.yourformname.submit() 就好了

    2〉

    在应用中有这样一个情况, 在A窗口中打开B窗口,在B窗口中操作完以后关闭B窗口,同时自动刷新A窗口

    function closeWin(){        

      hasClosed = true;         

    window.opener.location="javascript:reloadPage();";         

    window.close();      }     

    function window.onbeforeunload(){         

    if(!hasClosed){             

    window.opener.location="javascript:reloadPage();";       

       }     

    }

    上面的代码在关闭B窗口的时候会提示错误,说缺少Object,正确的代码如下:

    function closeWin(){         

    hasClosed = true;         

    window.opener.location="javascript:reloadPage();";         

    window.opener=null;         

    window.close();     

    }     

    function window.onbeforeunload(){         

    if(!hasClosed){//如果已经执行了closeWin方法,则不执行本方法             

    window.opener.location="javascript:reloadPage();";        

      }     

    }

    reloadPage方法如下:

    function reloadPage() {      

        history.go(0);         

    document.execCommand("refresh")         

    document.location = document.location;         

    document.location.reload();      }

    PS:由于需要支持正常关闭和强制关闭窗口时能捕捉到事件,用了全局变量hasClosed

    ==============================================

    补充,在父窗口是frame的时候在刷新父窗口的时候会出现问题:

    The page cannot be refreshed without resending the information. 后修改如下: window.opener.parent.document.frames.item('mainFrame').location.href = window.opener.location.href; 不需要执行自带的reload()方法,注意,不要再画蛇添足加上这一句:

    window.opener.parent.document.frames.item('mainFrame').location.reload();

    ======================================================================================== 最后,为了同时支持刷新普通父窗口和frame父窗口,代码如下:

    function closeWin() {         

    hasClosed = true;     

    }

  • 相关阅读:
    最好的(自我感觉)实现多个ASP.NET跨程序池共享Session [转]
    ASP.NET MVC 实现二级域名 [转]
    余弦相似度
    用Appfabric cache存储asp.net Session遇到的问题及总结(转)
    Hbase C# Thrift 连接 , 提示 因为队列满或者系统缺乏足够的缓冲空间
    Dictionary<byte[],string> 出现错误的解决方案
    百分点推荐引擎:从需求到架构
    ETL 学习 (转)
    消息队列软件产品大比拼
    基于Hbase的用户评分协同过滤推荐算法
  • 原文地址:https://www.cnblogs.com/hongfu/p/4323842.html
Copyright © 2011-2022 走看看