document.referrer和close()

时间:2012-07-24 16:47:58

标签: javascript if-statement referrer

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

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

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

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

'opener'为null或不是对象

我理解错误消息,因此如果引用网址不是 parent.html,我试图隐藏“开启者”,以便如果有人碰巧直接访问子页面,则开启者是隐藏且没有错误消息。

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

        <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'语句。

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

感谢Dario提出的建议:)我重新编写了它并且以下脚本有效:

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