1

我需要它来验证年龄,当我点击fancybox的under21 Age按钮时——我的当前窗口应该关闭。

我的代码是这样的:

<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 中不起作用。

4

1 回答 1

1

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

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

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

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

Chrome 允许该例外——它不适用于用户脚本——但 Firefox 不允许。Firefox 的实现直截了当地指出:

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

长期解决方案:

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

但是,由于 window.close 带来的安全风险对于 Greasemonkey/Tampermonkey 脚本来说要小得多;Greasemonkey 和 Tampermonkey 可以在其 API 中合理地提供此功能(本质上为您打包扩展工作)。考虑提出功能请求。

骇人听闻的解决方法:

Chrome 目前容易受到“自我重定向”漏洞的攻击。所以像这样的代码目前可以在 Tampermonkey 脚本中运行:

打开(位置,'_self')。关闭();这是错误的行为,IMO,并且可能会被 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

于 2015-05-27T13:29:06.730 回答