错误:window.opener 的属性未定义

Posted

技术标签:

【中文标题】错误:window.opener 的属性未定义【英文标题】:Error: window.opener's property undefined 【发布时间】:2013-09-10 11:58:12 【问题描述】:

一页使用window.open()方法打开另一页(例如,OpenerDemo.html),但Popup页面无法访问Opener页面的任何属性。

开启页面代码:

<head>
    <meta http-equiv="content-type" content="html/text"; charset="utf-8"  >
    <title>windowdemo</title>

    <script language="javascript">

        function openWin(thisurl) 
            popWin = window.open(thisurl, 'popupPage', "width=480,height=272");  
        

    </script>
</head>

<body>
    <input type="button" value="open" onClick="openWin('openerdemo.htm')"/>
</body>

弹窗(openerdemo.htm)代码:

<html>
<head>
    <meta http-equiv="content-type" content="html/text"; charset="utf-8"  >
    <title>windowdemo</title>

    <script language="JavaScript">

        function closeWin() 
            window.opener.close();
            window.close();
        
    </script>
</head>

<body>
<h1><a href="#" onClick="closeWin()">close all</a></h1>
</body>

我在Chrome中使用javascript控制台,在弹出窗口的cmd行输入'window.opener',返回:

window.opener '窗口 ',

这意味着打开窗口不为空,但它的所有属性都丢失了。但是,如果一个页面像这样打开一个新页面:

popWin = window.open('', 'popupPage', "width=480,height=272"); popWin.document.write("这是popupPage");

弹出页面的window.opener是opener窗口的ref,只是可以通过'window.opener'对象来控制opener窗口。 例如:

<body>

<script type="text/javascript">
myWindow=window.open('','','width=200,height=100')
myWindow.document.write("This is 'myWindow'")
myWindow.focus()
myWindow.opener.document.write("This is the parent window")
</script>

</body>

我在 FF、IE 和 chrome 中测试了这段代码。

谁能告诉我如何控制弹出页面中的开启器窗口?

【问题讨论】:

【参考方案1】:

它可以正常工作,但您正在发出跨域请求。如果你打开的窗口和你打开它的窗口在同一个域上,你不会有问题

注意:当您不使用网络服务器而仅使用文件系统(file:/// 是您的协议)时,这可能被归类为跨域请求。我还没有测试过——不过请放心,当你在网络上得到它时,只要打开者和被打开者都是来自同一个域的服务器,一切都会好起来的。

编辑

我刚刚在我的本地文件系统上做了一个快速测试,情况确实如此——它被归类为跨域请求,出于安全目的是禁止的——再一次,当你把它放在上面时不会有问题一个网络服务器并提供来自同一域的两个页面。

【讨论】:

以上是关于错误:window.opener 的属性未定义的主要内容,如果未能解决你的问题,请参考以下文章

怎样打开当前窗口的父窗口

react利用window.opener在同一个窗口里面传递参数

js window对象

window.opener和window.open的使用

window.opener 的用法

window.opener.focus()不起作用