0

ページに次のスクリプトがあります。たとえば、「child.html」としましょう。

opener.opener = opener; opener.close()参照URLがスクリプトのステートメント(parent.html)にリストされている場合にのみブラウザーに関数を表示さifせたいのですが、そうでない場合はブラウザーに表示させたくありません。

このスクリプトが存在するページは、親ページの子ページ(ポップアップ)です。ユーザーは(うまくいけば)親ページにのみアクセスし、その後、この子ページを開き、同時にopener.opener = opener; opener.close()関数を使用して親ページを閉じます。

この関数は正常に機能し、必要な処理を実行します(ポップアップを開いた後に親を閉じます)。しかし、子ページのURLに直接アクセスした場合(つまり、親ページからの指示なしに)、明らかに閉じる親ページがなく、スクリプトエラーが発生します。

「オープナー」がnullであるか、オブジェクトではありません

エラーメッセージを理解しているので、参照URLが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'ステートメント。

あなたが提供できるどんな助けにも前もって感謝します!

4

2 に答える 2

1

AND次のようなオープナー変数の初期化で条件を設定すると、最初のスクリプトは正しくなります。

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

return2つ目は、次のようなステートメントを使用する場合は、関数を書き留める必要があります。

<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 に答える