是否可以创建一个按钮,在新选项卡中打开指定网站并关闭当前选项卡?

Is it possible to create a button that opens a specified website in a new tab and closes the current one?

我正在为客户创建一个 WordPress 网站。该网站为虐待受害者提供支持,我的客户希望网站上有一个 "panic" 按钮,单击该按钮时:

a) 将用户发送到指定网站(例如google.com),然后清除后退按钮的历史记录

b) 在新选项卡中打开指定网站(消除了后退按钮问题),然后关闭当前选项卡。

我试过像这样添加一个简单的按钮:

<button onclick="window.close();">Close</button>

但后来我在控制台中得到了这个:

[Warning] Can't close the window since it was not opened by JavaScript

如果使用 Javascript 无法做到这一点,我还有其他方法可以做到吗?

不可能。

您遇到的问题是浏览器不允许 Javascript 控制诸如打开和关闭选项卡之类的操作,这是正确的。网页确实不应该能够访问或控制其选项卡之外的内容,这是一个称为 沙盒 的概念。网页可以在自己的沙箱中自由播放,但不允许了解或更改沙箱之外的内容。 "Browser history" 和 "Other tabs" 都在您网页的沙盒之外。

并不是说这在 JavaScript 中是不可能的,对于任何设计良好的浏览器来说都是不可能的,句号。这不是您可以使用什么技术来实现此目的的问题,而是一种设计明确禁止的行为。如果您可以在主流浏览器上执行此操作,您可能会获得漏洞赏金。想象一下恶意行为者可以通过修改后退按钮中的历史记录或关闭其他选项卡来做什么。

除此之外,我担心您的雇主正在采取的方法。施虐者通常比受害者更精通技术,像这样的 "panic button" 甚至不会影响浏览器的整体历史记录,更不用说打败任何高级监控,如间谍软件或高级路由器的 DNS 监控。应阻止虐待受害者使用他们认为受到威胁的设备或网络,并应通过可信和安全的通信渠道寻求帮助。我感到困扰的是,任何类型的 "panic button" 功能都会给不了解安全的用户造成一种错误的安全感。