需要关闭花哨框按钮上的当前窗口单击

Need to Close Current Window on fancybox Button Click

本文关键字:单击 窗口 按钮      更新时间:2023-09-26

我需要它进行年龄验证,当我点击fancybox的未满21岁年龄按钮时-我的当前窗口应该关闭。

我的代码是这样的:
<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();
}

窗口。close在Chrome和FF中不工作

普通javascript不能随意关闭窗口。这是一项不久前引入的安全功能,用于阻止各种恶意利用和骚扰。

来自window.close()的最新工作规范:

Window对象上的close()方法应该,如果满足以下所有条件,关闭浏览上下文A:

对应的浏览上下文A是脚本可关闭的。现有脚本的浏览上下文熟悉浏览上下文A。允许现有脚本的浏览上下文导航浏览上下文A。如果浏览上下文是由脚本创建的辅助浏览上下文(与用户的操作相反),或者浏览上下文的会话历史仅包含一个Document,则浏览上下文是脚本可关闭的。这意味着,除了一个小的例外,javascript不能被允许关闭一个不是由同一javascript打开的窗口。

Chrome允许这种例外——它不适用于用户脚本——但是Firefox不允许。Firefox的实现明确指出:

此方法只允许在脚本使用该窗口打开的窗口中调用。开放的方法。如果你试图使用窗口。关闭一个Greasemonkey/Tampermonkey/userscript,你会得到:Firefox:错误信息,"脚本可能无法关闭未由脚本打开的窗口。"Chrome:只是静默失败。

长期解决方案:

解决这个问题的最好方法是制作一个Chrome扩展和/或Firefox插件。这些可以可靠地关闭当前窗口。

然而,由于安全隐患,窗口构成。关闭,是少得多的Greasemonkey/Tampermonkey脚本;Greasemonkey和Tampermonkey可以在他们的API中合理地提供此功能(本质上是为您打包扩展工作)。考虑提出一个特性请求。

变通方法:

Chrome目前容易受到"自我重定向"漏洞的攻击。因此,像这样的代码目前将在Tampermonkey脚本中工作:

open(位置,_self) .close ();这是一个错误的行为,在我看来,很可能会被Chrome的未来版本所阻止,所以在使用这个hack时要记住这一点。

Firefox对该漏洞是安全的。所以,javascript唯一的方法就是削弱安全设置,一次一个浏览器。

可以打开about:config和setAllow_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