0

我在页面上有以下脚本,比如说“child.html”。

opener.opener = opener; opener.close()如果引用 URL 是脚本语句 (parent.html) 中列出的 URL,我只希望浏览器看到该函数if,否则我不希望浏览器看到它。

此脚本所在的页面是父页面的子页面(弹出窗口)。用户(希望)只会访问父页面,随后将使用该opener.opener = opener; opener.close()功能打开该子页面并同时关闭父页面。

该功能工作正常,可以做我需要做的事情(打开弹出窗口后关闭父级)。但是,如果直接访问子页面 URL(换句话说,没有从父页面定向),那么显然没有要关闭的父页面,我得到脚本错误:

'opener' 为 null 或不是对象

我理解错误消息,因此如果引用 URL不是parent.html,我为什么要尝试隐藏“opener”,这样如果有人碰巧直接访问子页面,opener 会被隐藏并且没有错误消息。

我需要在以下脚本中进行哪些更改才能使其正常工作?

        <script type="text/javascript">
        //<![CDATA[<!--
        if (document.referrer != '../parent.html') {
        opener.opener = opener;
        opener.close();}
        else {}
        //-->
        //]]>
        </script>

或者,我尝试编写以下内容:

        <script type="text/javascript">
        //<![CDATA[<!--
        if (document.referrer = '../parent.html') {
        return false;
        } else {
        opener.opener = opener;
        opener.close();}
        //-->
        //]]>
        </script>

但这会返回脚本错误:函数之外的'return'语句。

非常感谢您提供的任何帮助!

4

2 回答 2

1

如果您将AND条件与开启者变量的初始化一起设置,则您的第一个脚本是正确的,例如:

 if (document.referrer !== '../popup.html' && opener) { ... }

对于第二个,如果要使用以下return语句,则必须写下一个函数:

<script type="text/javascript">
   //<![CDATA[<!--
   function(){
     function myFunct() {
       if (document.referrer === '../parent.html' || !opener) {
         return false;
       } else {
         opener.opener = opener;
         opener.close();
         return true;
       }
    }
    myFunct();
   }();​
   //-->
   //]]>
</script>
于 2012-07-24T17:14:24.110 回答
0

感谢 Dario 的建议 :) 我重写了它并且下面的脚本有效:

        <script type="text/javascript">
        //<![CDATA[<!--
        if (document.referrer != '../popup.html' && opener) { 
        opener.opener = opener;
        opener.close();}
        //-->
        //]]>
        </script>
于 2012-07-24T17:02:48.823 回答