window.opener 的用法

2023-10-30

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();";
         }
     }

</script>
上面的代码在关闭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();";
         }
     }

</script>
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;
     <%if(null != frame){%>
         window.opener.parent.document.frames.item('mainFrame').location.href = window.opener.location.href;
     <%}else{%>
         window.opener.location = "javascript:reloadPage();";
     <%}%>
         //window.opener.top.mainFrame.location="javascript:reloadPage();";
         //self.opener.frames.mainFrame.location.reload(true);
         window.opener = null;
         window.close();
     }
     function window.onbeforeunload(){
         if (!hasClosed) {
         <%if(null != frame){%>
             window.opener.parent.document.frames.item('mainFrame').location.href = window.opener.location.href;
         <%}else{%>
             window.opener.location = "javascript:reloadPage();";
         <%}%>
             window.opener = null;
         }
     }
关于window.opener

window.opener 的用法

    window.opener 返回的是创建当前窗口的那个窗口的引用,比如点击了a.htm上的一个链接而打开了b.htm,然后我们打算在b.htm上输入一个值然后赋予a.htm上的一个id为“name”的textbox中,就可以写为:

    window.opener.document.getElementById("name").value = "输入的数据";

    对于javascrīpt中的window.opener没有很好的理解。

    为什么框架中不能使用,弹出窗口的父窗口不能在框架里面的某个页面呢?那怎样通过弹出窗口操作框架中的父窗口呢?

    opener.parent.frames['frameName'].document.all.input1.value 试试这个:)

 

 

 

正确使用window.open返回对象的opener 

众所周知JavaScript中:

var win = window.open(url,windowName,...); 的使用,

而win.opener则是指向父窗口的引用

然而,有种情况却比较特别,

假如有两个窗口window1和window2

按下列步骤执行:

var win = window.open(url,windowName,...);// (window1)

var win = window.open(url,windowName,...);//(window2)

其中先后这两次打开的子窗口的windowName一样

此时你会发现在window2中的win.opener却不是指向window2的,却是指向window1.

如果你想在子窗口关闭父窗口的话,就不正确了,因此可以修改上面的执行方法为:

var win = window.open(url,windowName,...);? (window1)

win.opener = window;

var win = window.open(url,windowName,...);? (window2)

win.opener = window;

只有这样修改才OK

 

 

 

 

 

通过window.showModalDialog或者.showModelessDialog弹出的页面

这种情况需要两个步骤:
1 在父窗口.showModalDialog或.showModelessDialog方法的第二个参数传递window对象
比如: window.showModelessDialog('a.htm',window);
2 在a.htm中就可以通过window.dialogArguments获取该参数
比如: window.dialogArguments.fun1();
PS:子窗口可以通过设置window.returnValue设置页面返回值
比如: window.returnValue=’OK’;window.close();

strRtn=window.showModalDialog(......)

这时,strRtn='ok'

 

页面中实现:
父页面
function reloadPage() {
         document.form1.submit();
     }
弹出页面调用closeWin();
function closeWin(){
         hasClosed = true;
         window.opener.location="javascript:reloadPage();";
         window.opener=null;
         window.close();
     }

 

 

 

http://www.cnblogs.com/zhangzt/archive/2009/12/24/1631253.html

手机扫一扫,欢迎关注公众号

关注程序员成长

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

window.opener 的用法 的相关文章

  • 添加到列表时有没有办法避免循环?

    我想知道这样的代码 List
  • 使用 Javascript/Node.js 在代码内执行 mongoimport

    node js javascript 中是否有任何库可供个人使用mongoimport在代码中 据我了解 mongoimport 有点像 exe 您必须先执行它 然后才能使用其文本输入环境 是否可以在我的代码中执行 mongoimport
  • Angular 2 将字符串转换为 md5 哈希

    我找到了ts md5 https www npmjs com package ts md5包 但在示例中它有一个hashStr方法 但现在不行了 类型上不存在属性 hashStr Md5 使用该错误后 该错误会记录在我的控制台中 我怎样才能
  • 如何删除日期对象的亚秒部分

    当 SQL 数据类型为时间戳时 java util Date 存储为 2010 09 03 15 33 22 246 如何在存储记录之前将亚秒设置为零 例如 在本例中为 246 最简单的方法是这样的 long time date getTi
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • Java - 从 XML 文件读取注释

    我必须从 XML 文件中提取注释 我找不到使用 JDOM 或其他东西来让它们使用的方法 目前我使用 Regex 和 FileReader 但我不认为这是正确的方法 您可以使用 JDOM 之类的东西从 XML 文件中获取注释吗 或者它仅限于元
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 使用Java绘制维恩图

    我正在尝试根据给定的布尔方程绘制维恩图 例如 a AND b AND c我想在 Android 手机上执行此操作 因此我需要找到一种使用 Java 来执行此操作的方法 我找到了一个完美的小部件 它可以完成我在这方面寻找的一切布尔代数计算器
  • 从请求url获取hash参数

    我有这样的网址 http www coolsite com daily plan id 1 http www coolsite com daily plan id 1解析该字符串并读取哈希值 id 之后的值 的最简单方法是什么 谢谢 在客户
  • 我可以限制分布式应用程序发出的请求吗?

    我的应用程序发出 Web 服务请求 提供商处理的请求有最大速率 因此我需要限制它们 当应用程序在单个服务器上运行时 我曾经在应用程序级别执行此操作 一个对象跟踪到目前为止已发出的请求数量 并在当前请求超出允许的最大负载时等待 现在 我们正在
  • 什么时候可以使用Javascript,什么时候不可以?

    不使用太多 javascript jquery 是个好习惯吗 我们应该尽可能避免它 为了良好的可访问性 吗 什么时候可以使用 JavaScript 什么时候不能在网页设计和开发中使用 JavaScript 在什么场景 什么条件下 Updat
  • JMS 中的 MessageListener 和 Consumer 有什么区别?

    我是新来的JMS 据我了解Consumers能够从队列 主题中挑选消息 那么为什么你需要一个MessageListener因为Consumers会知道他们什么时候收到消息吗 这样的实际用途是什么MessageListener 编辑 来自Me
  • 何时在 hibernate 中使用 DiscriminatorValue 注解

    在 hibernate 中使用 DiscriminatorValue 注释的最佳场景是什么以及何时 这两个链接最能帮助我理解继承概念 http docs oracle com javaee 6 tutorial doc bnbqn html
  • 如何使用 jQuery 过滤 DropDownList 中的选项

    我有 2 个 DropDownList 第一个 DropDownList 有 4 个选项 第二个 DropDownList 有 20 个选项 我想要一个选项value 1在第一个 DropDownList 中选择我在第二个 DropDown
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的
  • highchart堆积柱每个类别的总数据

    我想获取每个类别的总数据 这point stackTotal只给出活动数据的总数 从我粘贴的代码示例中 我想知道每种水果的总消耗量 因此 即使我单击右上角图例上的乔的名字 这使得堆叠图表上的所有乔信息都处于非活动状态 我仍然可以知道约翰 简
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 在 Firestore 文本字段中存储文本文件并删除换行符

    我正在尝试将 CSV 文件存储在 Cloud Firestore 内的文本字段中 然而 Firestore 正在删除所有换行符并将整个 CSV 文件存储为一行 这Firestore 数据类型文档 https firebase google
  • 如何使用通配符模拟泛型方法的行为

    我正在使用 EasyMock 3 2 我想基于 Spring Security 为我的部分安全系统编写一个测试 我想嘲笑Authentication http docs spring io autorepo docs spring secu
  • Safari 扩展将消息发送到特定选项卡

    有没有办法从全局页面发送消息到特定选项卡 我目前正在做的是 在创建选项卡时 注入的脚本会创建一个唯一的 ID 并将包含该编号的消息发送到全局页面 并且全局页面会保存该编号 如果全局页面需要发送一些数据到一个tab 即 tab 3 然后全局页

随机推荐

  • pandas中iloc()函数

    pandas中iloc 函数 DataFrame iloc 纯基于整数位置的索引 import pandas as pd mydict a 1 b 2 c 3 d 4 a 100 b 200 c 300 d 400 a 1000 b 200
  • TensorFlow数据归一化

    TensorFlow数据归一化 1 tf nn l2 normalize l2 normalize x dim epsilon 1e 12 name None output x sqrt max sum x 2 epsilon 2 使用sc
  • 【送书活动】深入浅出SSD:固态存储核心技术、原理与实战

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 React从入门到精通 前端炫酷代码分享 从0到英雄 vue成神之路 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架
  • 博士研究生如何做创新性研究?(蒲慕明院士)

    读文献不要只看文献描述的工作 What was done 还有四个 W 你也应知道 是谁做的 Who did it 什么时候做的 When 在哪里做的 Where 为什么会做这工作 Why 想了解重要的创新工作的来龙去脉 你就要读科学史 读
  • 全面深入了解python(一)

    全面深入了解python 一 写在开始前 此教程不是基础教程 在看之前你需要有一定的python基础 不然你可能无法理解教程到底教了哪些东西 环境 python版本是3 6 5 gt 3 4即可 1 Python数据模型 数据模型其实是对P
  • 高级排序技巧:提升Python中排序算法的效率和灵活性

    排序是计算机科学中常见的操作之一 它可以对数据进行按照特定顺序排列的操作 Python提供了多种排序算法 如冒泡排序 插入排序 选择排序等 然而 在处理大规模数据或对特定需求有限制时 我们需要使用更高级的排序技巧来提高算法的效率和灵活性 本
  • 7、ListView的几种适配器及自定义适配器

    span style font family none background color rgb 255 255 255 ListView是我们在Android应用开发中常用的组件 它通过列表的形式展示数据 具有很强的可扩展性 通常使用还会
  • npm查看一个包的版本信息

    我们npm install安装一个包之后 怎么查看这个包的版本信息呢 过一段时间之后 如何查看这个包最新的版本信息呢 下面将做一个全面的总结 1 查看项目中安装的所有的包 npm list 结果如下 vue2 0 test 0 1 0 C
  • scrapy 最简易爬虫

    创建一个项目 scrapy startproject baidu 这后面是名字 运行项目 要cd 进入项目才可以运行 scrapy crawl baidu import scrapy from bs4 import BeautifulSou
  • 关于OSB执行管道outbound的Content-Type自动添加charset=utf-8解决办法

    一 问题描述 在执行Content Type application x www form urlencoded类型的接口的管道时outbound自动添加charset utf 8 如下图所示 二 解决办法 将所有服务器都停掉 1 打补丁
  • 海康rtsp抓包分析

    海康h264 rtp rtsp rtcp包分析 1 DESCRIBE rtsp 192 168 0 186 554 mpeg4 ch01 main av stream RTSP 1 0 CSeq 0 Accept application s
  • 计算机经典书籍2

    推荐度参考 6分 可看可不看 7分 值得一读 8分 经典好书 9分 强烈推荐 10分 神品级 C语言类 C程序设计语言 推荐度 8分 书籍简介 在计算机发展的历史上 没有哪一种程序设计语言像C语言这样应用广泛 本书原著即为C语言的设计者之一
  • 1896-2021历届奥运会奖牌榜(Python数据处理)

    阅读本文大约需要 3 分钟 摘 要 这两天在平台上看到一些创作者失去创作动力的感慨 OF只想说往事如昙花一现 我们都需要时刻静下心来 认真地考虑下自己的创作目标并付诸行动 遥想当年OF做软件系统的时候 开源社区还没有像现在这样健全 再看看如
  • 多模态交互的概念与现状

    一 多模态概念 所谓 模态 英文是modality 用通俗的话说 就是 感官 多模态即将多种感官融合 目前的人机智能交互比如语言控制不如屏幕控制那么精准 很多时候会误判指令和错误唤醒 比较语言充满了不确定性 再比如 语音交互的物联网设备还是
  • linux 网络编程socket

    前言 socket 套接字 是linux下进程间通信的一种方式 通常使用C S 客户端 服务端 的方式通信 它可以是同一主机下的不同进程间通信或者不同主机的进程通信 socket是夹在应用层和TCP UDP协议层间的软件抽象 向应用层开发人
  • (简单易记版)考研复试英语自我介绍

    Good morning teachers I am very glad to be able to attend this interview First let me introduce myself my name is xxx 24
  • 当出现raise NotImplementedError报错

    class LeNet5 nn Module def init self super LeNet5 self init 定义卷积层 self conv nn Sequential nn Conv2d in channels 1 out ch
  • 【FreeRTOS学习计划】 第八节 任务延时列表的实现

    在本节之前 为了实现任务的阻塞延时 在任务控制块中内置了一个延时变量xTicksToDelay 每当任务需要延时的时候 就初始化 xTicksToDelay 需要延时的时间 然后将任务挂起 这里的挂起只是将任务在优先级位图表 uxTopRe
  • 关于‘try-with-resources‘的问题

    开发中在使用读写流的时候会遇到一个问题 try 通过输入流读取文件内容 FileInputStream警告try with resources FileInputStream inputStream new FileInputStream
  • window.opener 的用法

    window opener 实际上就是通过window open打开的窗体的父窗体 比如在父窗体parentForm里面 通过 window open subForm html 那么在subform html中 window opener