需要在 fancybox 按钮上关闭当前 Window 单击
Need to Close Current Window on fancybox Button Click
我需要它来验证年龄,当我点击 fancybox 的 21 岁以下年龄按钮时 - 我的当前 window 应该关闭。
我的代码是这样的:
<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 中不起作用。
普通javascript无法关闭windows随意。这是不久前推出的一项安全功能,用于阻止各种恶意攻击和干扰。
From the latest working spec for window.close():
如果满足以下所有条件,Window 对象的 close() 方法应该关闭浏览上下文 A:
对应的浏览上下文A是脚本可关闭的。
现任脚本的浏览上下文熟悉浏览上下文 A。
允许当前脚本的浏览上下文在浏览上下文 A 中导航。
如果浏览上下文是由脚本创建的辅助浏览上下文(与用户的操作相反),或者如果它是会话历史仅包含一个文档的浏览上下文,则浏览上下文是脚本可关闭的。
这意味着,除了一个小例外,不得允许 javascript 关闭未由 javascript.
打开的 window
Chrome 允许该例外——它不适用于用户脚本——但 Firefox 不允许。 Firefox 实现完全声明:
此方法只允许对使用 window.open 方法由脚本打开的 windows 调用。
如果你尝试从 Greasemonkey / Tampermonkey / userscript 使用 window.close 你会得到:
Firefox:错误消息,"Scripts may not close windows that were not opened by script."
Chrome: 默默地失败了。
长期解决方案:
处理此问题的最佳方法是制作一个 Chrome 扩展 and/or Firefox 附加组件。这些可以可靠地关闭电流 window.
但是,由于 window.close 带来的安全风险对于 Greasemonkey/Tampermonkey 脚本来说要小得多; Greasemonkey 和 Tampermonkey 可以在他们的 API 中合理地提供此功能(实质上是为您打包扩展工作)。
考虑提出功能请求。
棘手的解决方法:
Chrome 目前容易受到 "self redirection" 攻击。所以像这样的代码目前可以在 Tampermonkey 脚本中运行:
open(location, '_self').close();
这是错误行为,IMO,可能会被 Chrome 的未来版本阻止,因此请牢记这一点。
Firefox 可以安全抵御该漏洞利用。因此,唯一的 javascript 方法是削弱安全设置,一次一个浏览器。
您可以打开about:config并设置
allow_scripts_to_close_windows 为真。
如果您的脚本供个人使用,请继续执行。如果您要求其他人打开该设置,他们会带着偏见拒绝是明智的,也是有道理的。
目前没有 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
我需要它来验证年龄,当我点击 fancybox 的 21 岁以下年龄按钮时 - 我的当前 window 应该关闭。
我的代码是这样的:
<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 中不起作用。
普通javascript无法关闭windows随意。这是不久前推出的一项安全功能,用于阻止各种恶意攻击和干扰。
From the latest working spec for window.close():
如果满足以下所有条件,Window 对象的 close() 方法应该关闭浏览上下文 A:
对应的浏览上下文A是脚本可关闭的。 现任脚本的浏览上下文熟悉浏览上下文 A。 允许当前脚本的浏览上下文在浏览上下文 A 中导航。 如果浏览上下文是由脚本创建的辅助浏览上下文(与用户的操作相反),或者如果它是会话历史仅包含一个文档的浏览上下文,则浏览上下文是脚本可关闭的。 这意味着,除了一个小例外,不得允许 javascript 关闭未由 javascript.
打开的 windowChrome 允许该例外——它不适用于用户脚本——但 Firefox 不允许。 Firefox 实现完全声明:
此方法只允许对使用 window.open 方法由脚本打开的 windows 调用。 如果你尝试从 Greasemonkey / Tampermonkey / userscript 使用 window.close 你会得到: Firefox:错误消息,"Scripts may not close windows that were not opened by script." Chrome: 默默地失败了。
长期解决方案:
处理此问题的最佳方法是制作一个 Chrome 扩展 and/or Firefox 附加组件。这些可以可靠地关闭电流 window.
但是,由于 window.close 带来的安全风险对于 Greasemonkey/Tampermonkey 脚本来说要小得多; Greasemonkey 和 Tampermonkey 可以在他们的 API 中合理地提供此功能(实质上是为您打包扩展工作)。 考虑提出功能请求。
棘手的解决方法:
Chrome 目前容易受到 "self redirection" 攻击。所以像这样的代码目前可以在 Tampermonkey 脚本中运行:
open(location, '_self').close(); 这是错误行为,IMO,可能会被 Chrome 的未来版本阻止,因此请牢记这一点。
Firefox 可以安全抵御该漏洞利用。因此,唯一的 javascript 方法是削弱安全设置,一次一个浏览器。
您可以打开about:config并设置 allow_scripts_to_close_windows 为真。
如果您的脚本供个人使用,请继续执行。如果您要求其他人打开该设置,他们会带着偏见拒绝是明智的,也是有道理的。
目前没有 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