需要在fancybox按钮上关闭当前窗口单击

时间:2015-05-27 13:17:25

标签: javascript jquery fancybox window.closed

我需要它进行年龄验证,当我点击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();
}

window.close在Chrome和FF中无效。

1 个答案:

答案 0 :(得分:1)

普通的javascript无法关闭Windows willy-nilly。这是一段安全功能,不久前推出,用于阻止各种恶意攻击和烦恼。

  

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

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

相应的浏览上下文A可以通过脚本关闭。 现有脚本的浏览上下文熟悉浏览上下文A. 允许现任脚本的浏览上下文导航浏览上下文A. 如果浏览上下文是由脚本创建的辅助浏览上下文(而不是用户的操作),或者如果它是会话历史记录仅包含一个文档的浏览上下文,则浏览上下文可以关闭脚本。 这意味着,除了一个小例外,不得允许javascript关闭未被同一个javascript打开的窗口。

Chrome允许该异常 - 它不适用于用户脚本 - 但Firefox不支持。 Firefox实施平台表明:

只允许对使用window.open方法由脚本打开的窗口调用此方法。 如果您尝试使用Greasemonkey / Tampermonkey / userscript中的window.close,您将获得: Firefox:错误消息“脚本可能无法关闭脚本未打开的窗口。” Chrome:只是默默地失败。

长期解决方案:

解决此问题的最佳方法是改为使用Chrome扩展程序和/或Firefox插件。这些可以可靠地关闭当前窗口。

但是,由于对于Greasemonkey / Tampermonkey脚本,window.close构成的安全风险要小得多; Greasemonkey和Tampermonkey可以在他们的API中合理地提供这种功能(基本上包装扩展工作)。 考虑发出功能请求。

hacky变通办法:

Chrome目前很容易受到“自我重定向”攻击。所以这样的代码目前可以在Tampermonkey脚本中使用:

open(location,'_ self')。close(); 这是一种有缺陷的行为,IMO,并且可能会被未来的Chrome版本阻止,因此请牢记这一点。

Firefox可以抵御该攻击。因此,唯一的javascript方法是一次性删除一个浏览器的安全设置。

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