错误:窗口打开器的属性未定义

Error: window.opener's property undefined

本文关键字:属性 未定义 窗口 错误      更新时间:2023-09-26

一个页面使用 window.open() 方法打开另一个页面(例如 openerdemo.html),但弹出页面无法访问打开器页面的任何属性。

打开器页面代码:

<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",它返回:

窗口.打开器
'窗口 {}',

这意味着打开器窗口不为 null,但其所有属性都丢失。但是,如果一个页面打开一个新页面,如下所示:

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

弹出窗口的 window.opener 是打开器窗口的引用,并且只能使用 'window.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中测试了此代码。

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

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

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

编辑

我刚刚对我的本地文件系统进行了快速测试,确实如此 - 它被归类为跨域请求,出于安全目的被禁止 - 同样,当您将其放在 Web 服务器上并提供来自同一域的两个页面时,这不会有问题。