2012-07-24 43 views
0

我在頁面上有下面的腳本,讓我們說「child.html」。document.referrer and close()

我只希望瀏覽器看到函數opener.opener = opener; opener.close()如果引用的URL是腳本的if語句(parent.html)中列出的URL,否則我不希望瀏覽器看到它。

此腳本所在的頁面是父頁面的子頁面(彈出窗口)。用戶(希望)只能訪問父頁面,該頁面隨後將打開此子頁面並使用opener.opener = opener; opener.close()函數同時關閉父頁面。

該函數工作正常,並做我需要它做的事情(打開彈出後關閉父)。 但是,如果直接訪問子頁面URL(換句話說,沒有從父頁面導向),那麼顯然沒有父頁面關閉,並且我得到腳本錯誤:

'opener'爲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' 語句的功能之外。

非常感謝您提供的任何幫助!

+1

首先,如果你想寫一個函數,你必須聲明它,然後調用:function myFunc(...){//你的代碼返回} myFunc(...) – Dario 2012-07-24 16:51:47

+1

第一段代碼嘗試類似if(document.referrer!='../parent.html'&& opener){....} – Dario 2012-07-24 16:56:13

+0

謝謝Dario! :) – abracassabra 2012-07-24 17:03:09

回答

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> 
+0

非常感謝Dario,感謝您的詳盡解釋和示例:) – abracassabra 2012-07-24 18:03:43

0

感謝達里奧您的建議:)我重寫它和下面的腳本工作:

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