2015-05-27 128 views
0

我需要它進行年齡驗證,當我點擊under21年齡按鈕的fancybox-我的當前窗口應該關閉。需要關閉fancybox按鈕上的當前窗口點擊

我的代碼是這樣的:

<div style="display:none;"> 
<div id="age-popup"> 
    <div style="margin: 0 auto;text-align: center;"> 
     <h2>Welcome!</h2> 
     <h3>Please Verify Your Age to Enter.</h3> 
     <input type="button" name="age" onclick="return overage();" value="21 & Over" /> 
     <input type="button" id="WarringMsg" name="WarringMsg" onclick="close_window()" value="Under 21" /> 
    </div><br> 
    <p>Our product is not appropriates for individuals under 18 and window will be close automatically.</p> 
</div> 

function overage() 
{ 
     user = "verifieduser"; 
     setCookie("username", user, 30); 
    jQuery.fancybox.close(); 
} 
function close_window() { 
    // window.open("about:blank","_self"); 
    // window.close(); 
    window.open('','_self'); 
    self.close(); 
} 

window.close在Chrome和FF工作。

+0

可能重複[如何關閉當前標籤頁在瀏覽器窗口?](http://stackoverflow.com/questions/2076299/how-to-close-current-tab-in-a-browser-window) – Liam

回答

1

普通的javascript無法關閉窗戶。這是前段時間介紹的一項安全功能,用於阻止各種惡意攻擊和煩惱。

從window.close()的最新工作規範:

在Window對象的close()方法應該,如果滿足下列所有條件都滿足時,關閉瀏覽器上下文答:

相應的瀏覽上下文A是腳本可關閉的。 現任腳本的瀏覽上下文是熟悉的瀏覽上下文A. 現任腳本的瀏覽上下文允許導航瀏覽上下文A. 甲瀏覽上下文是腳本閉合的,如果它是爲輔助瀏覽上下文由腳本創建(而不是由用戶的操作),或者如果它是一個瀏覽上下文,其會話歷史記錄只包含一個Document。 這意味着,只有一個小例外,不能允許JavaScript關閉未由同一個javascript打開的窗口。

鉻允許例外 - 它並不適用於userscripts - 但Firefox沒有。 Firefox的實現平出狀態:

這種方法只允許呼籲通過使用window.open方法的腳本時打開窗戶。 如果您嘗試使用window.close從Greasemonkey的/ Tampermonkey/userscript您將獲得: 火狐:該錯誤消息,「腳本可能無法關閉窗口未由腳本打開。」 Chrome:只是默默地失敗。

的長期解決方案:

最好的方式來處理,這是做一個Chrome擴展程序和/或Firefox插件代替。這些可以可靠地關閉當前窗口。

然而,由於安全隱患,通過window.close構成,是一個Greasemonkey的/ Tampermonkey腳本少得多; Greasemonkey和Tampermonkey可以在他們的API中合理地提供這個功能(主要是爲你打包擴展工作)。 考慮提出功能請求。

的哈克解決方法:

Chrome目前脆弱的「自我重定向」漏洞。關閉()

開放(「_self」位置);:所以這樣的代碼將目前在Tampermonkey腳本工作 這是錯誤的行爲,國際海事組織,並有可能被未來版本的Chrome阻止,所以請牢記這一點。

Firefox對這種攻擊是安全的。所以,唯一的javascript方法是一次性削弱安全設置,一個瀏覽器。

您可以打開about:config並將 allow_scripts_to_close_windows設置爲true。

如果您的腳本是供個人使用的,請繼續操作。如果你要求其他人改變這種情況,那麼他們會很聰明,而且有理由拒絕這種偏見。

目前沒有用於Chrome的等效設置。 這對於某些瀏覽器工作: HTML:

<input type="button" name="Quit" id="Quit" value="Quit" onclick="return quitBox('quit');" /> 
JavaScript: 

function quitBox(cmd) 
{ 
    if (cmd=='quit') 
    { 
     open(location, '_self').close(); 
    } 
    return false; 
} 

試試這個測試頁面:(現在在Chrome 40和Firefox 35測試)的

http://browserstrangeness.bitbucket.org/window_close_tester.htm

相關問題