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

时间:2013-09-06 11:32:43

标签: javascript html

一个页面使用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',它返回:

  

window.opener
  'Window {}',

这意味着开启窗口不为null,但缺少所有属性。但是,如果一个页面打开一个这样的新页面:

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

弹出页面的window.opener是对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中测试了这段代码。

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

1 个答案:

答案 0 :(得分:2)

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

注意:当您不使用网络服务器时,可能会将其归类为跨域请求,但只使用文件系统(文件:///是您的协议)。我还没有对它进行过测试 - 但请放心,当你在网上得到它时,只要开启者和开放者都是来自同一域的服务器,一切都会好的。

修改

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