gpt4 book ai didi

javascript - 需要关闭 fancybox 按钮上的当前窗口单击

转载 作者:行者123 更新时间:2023-11-28 00:15:37 24 4
gpt4 key购买 nike

我需要它进行年龄验证,当我点击 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 中不起作用。

最佳答案

普通的javascript无法随意关闭窗口。这是不久前推出的一项安全功能,旨在阻止各种恶意利用和烦恼。

From the latest working spec for window.close():

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

相应的浏览上下文 A 是脚本可关闭的。现有脚本的浏览上下文与浏览上下文 A 相似。允许现有脚本的浏览上下文导航浏览上下文 A。如果浏览上下文是由脚本创建的辅助浏览上下文(而不是由用户的操作),或者如果它是 session 历史记录仅包含一个文档的浏览上下文,则该浏览上下文是可脚本关闭的。这意味着,除了一个小异常(exception)之外,不允许 javascript 关闭不是由同一 javascript 打开的窗口。

Chrome 允许这种异常(exception)——它不适用于用户脚本——但 Firefox 不允许。 Firefox 的实现表明:

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

长期解决方案:

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

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

黑客解决方法:

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

open(location, '_self').close();在我看来,这是一种有缺陷的行为,并且可能会被 Chrome 的 future 版本阻止,因此在使用此技巧时请记住这一点。

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

关于javascript - 需要关闭 fancybox 按钮上的当前窗口单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30483662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com