ChatGPT解决这个技术问题 Extra ChatGPT

如何在浏览器窗口中关闭当前选项卡?

我想在网页上创建一个链接,该链接将关闭浏览器中当前活动的选项卡,而不关闭浏览器中的其他选项卡。当用户单击关闭链接时,应该会出现一条警告消息,要求用户使用两个按钮进行确认,“YES”和“NO”。如果用户单击“是”,则关闭该页面,如果“否”,则不执行任何操作。

怎么做到呢?有什么建议么?

我可能在这里迟到了,但这被浏览器阻止是有原因的。

想想你自己一次又一次地试图关闭一个窗口,它没有关闭,因为它在你的问题中执行“如果不是”部分是'什么都不做'。

这肯定会很烦人!
这不可能。读这个。 stackoverflow.com/a/19768082/4671932
对于试图以编程方式关闭选项卡的任何人,我有两件事要添加 (TL:DR;) 1 您只能关闭使用 javascript 打开的选项卡(如 Ryan Joy 所述)。 2,此处未提及:只有当 window.top.opener(“父”窗口)不为空时,您才能关闭标签
windows.close() 不能在角度工作。它给了我脚本可能只关闭它们打开的窗口。警告。

R
Rublacava

您将需要 Javascript 来执行此操作。使用 window.close()

close();

注意:当前选项卡是隐含的。这是等价的:

window.close();

或者您可以指定不同的窗口。

所以:

function close_window() {
  if (confirm("Close Window?")) {
    close();
  }
}

使用 HTML:

<a href="javascript:close_window();">close</a>

或者:

<a href="#" onclick="close_window();return false;">close</a>

您在此处return false 以防止事件的默认行为。否则,浏览器将尝试访问该 URL(显然不是)。

现在 window.confirm() 对话框上的选项将是 OK 和 Cancel(不是 Yes 和 No)。如果您真的想要Yes 和No,您需要创建某种模态Javascript 对话框。

注意:与上述内容存在特定于浏览器的差异。如果您使用 Javascript(通过 window.open())打开窗口,那么您可以使用 javascript 关闭窗口。 Firefox 不允许您关闭其他窗口。我相信IE会要求用户确认。其他浏览器可能会有所不同。


您不能通过 JavaScript 关闭任何选项卡。 “这个方法只允许被脚本使用 window.open 方法打开的窗口调用。”换句话说,您只能使用 JavaScript 关闭通过 JavaScript 生成的窗口/选项卡。
-1 不工作 chrome 30 PC 其他答案显示在当前选项卡中打开一个窗口然后关闭它工作
about:config dom.allow_scripts_to_close_windows = true 可能是 Firefox 中的解决方案(可能存在很大的安全风险!)
浏览器不允许这种行为。 Javascript 只能关闭它打开的选项卡。
这在 Chrome 62 中(至少)有效:<button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> See also this article
D
Daniel Shen

尝试这个

<a href="javascript:window.open('','_self').close();">close</a>

在 Firefox 31.0 中工作
这个解决方案的不好的一面是获取请求被发送到服务器。但另一方面,我还没有找到任何其他解决方案。
从 Chrome 控制台输出“脚本可能只关闭它打开的窗口”
无法在 chrome 60.0.3079.0 中工作:“脚本只能关闭它打开的窗口。”
P
Palesz

此方法适用于 Chrome 和 IE:

<a href="blablabla" onclick="setTimeout(function(){var ww = window.open(window.location, '_self'); ww.close(); }, 1000);">
    If you click on this the window will be closed after 1000ms
</a>

更简单:open(location, '_self').close();
这在 IE 11 中运行良好,但在 Chrome 38 中不起作用
G
Guy Schalnat

据我所知,在 Chrome 或 FireFox 中不再可能。在 IE(至少在 Edge 之前)中仍然可能。


这在 Chrome 62 中(至少)有效:<button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> See also this article
@hering 好吧,这篇文章是 2006 年的,但如果你发现了一些有用的东西,那是个好消息,也许会对读到这里的人有所帮助。感谢分享。
问题是关于从该选项卡中关闭当前活动选项卡。正如您所说,这在 Chrome 或 Firefox 中是不可能的。这应该是公认的答案。
M
Mackey Johnstone

很抱歉发布了这个,但我最近实现了一个本地托管的站点,该站点需要能够关闭当前浏览器选项卡,并发现了一些有趣的解决方法,这些解决方法在我能找到的任何地方都没有很好的记录,所以我自己去做了。

注意:这些变通办法是在考虑本地托管站点的情况下完成的,并且(Edge 除外)需要专门配置浏览器,因此不适用于公共托管站点。

语境:

过去,jQuery 脚本 window.close() 能够在大多数浏览器上毫无问题地关闭当前选项卡。但是,出于安全原因,大多数现代浏览器不再支持此脚本。

当前功能:

window.close() 适用于由脚本打开的标签,由带有 target="_blank" 的锚点(在新标签中打开)

请参阅@killstreet 对@calios 回答的评论

浏览器特定的解决方法:

谷歌浏览器:

Chrome 不允许运行 window.close() 脚本,如果您尝试使用它,则不会发生任何事情。但是,通过使用 Chrome 插件 TamperMonkey,我们可以使用 window.close() 方法如果您将 // @grant window.close 包含在 TamperMonkey 的 UserScript 标头中。

例如,我的脚本(当单击 id = 'close_page' 的按钮并且在浏览器弹出窗口上按下 'yes' 时触发)如下所示:

// ==UserScript==
// @name         Close Tab Script
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Closes current tab when triggered
// @author       Mackey Johnstone
// @match        http://localhost/index.php
// @grant        window.close
// @require      http://code.jquery.com/jquery-3.4.1.min.js
// ==/UserScript==

(function() {
    'use strict';
    $("#close_page").click(function() {
        var confirm_result = confirm("Are you sure you want to quit?");
        if (confirm_result == true) {
            window.close();
        }
    });
})();

注意:此解决方案只能在不是最后一个打开的选项卡时关闭选项卡。如此有效,如果它会通过打开最后一个选项卡而导致窗口关闭,则它无法关闭选项卡。

火狐:

Firefox 有一个高级设置,您可以启用它以允许脚本关闭窗口,从而有效地启用 window.close() 方法。要启用此设置,请转到 about:config,然后搜索并找到 dom.allow_scripts_to_close_windows 首选项并将其从 false 切换为 true。

这使您可以像使用任何其他脚本一样直接在 jQuery 文件中使用 window.close() 方法。

例如,此脚本在首选项设置为 true 的情况下完美运行:

<script>
  $("#close_page").click(function() {
    var confirm_result = confirm("Are you sure you want to quit?");
    if (confirm_result == true) {
      window.close();
    }
  });
</script>

这比 Chrome 解决方法好得多,因为它允许用户关闭当前选项卡,即使它是唯一打开的选项卡,并且不需要第三方插件。然而,一个缺点是它还使该脚本能够由不同的网站(不仅仅是您打算使用它的网站)运行,因此可能存在安全隐患,尽管我无法想象关闭当前选项卡会特别危险。

边缘:

令人失望的是,Edge 实际上在我尝试的所有 3 种浏览器中表现最好,并且使用 window.close() 方法无需任何配置。运行 window.close() 脚本时,会有一个额外的弹出窗口提醒您该页面正在尝试关闭当前选项卡并询问您是否要继续。

编辑:这是在旧版本的 Edge 上,而不是基于铬。我还没有测试过它,但想象它会在基于铬的版本上与 Chrome 类似

https://i.stack.imgur.com/CucLe.png

最后说明:Chrome 和 Firefox 的解决方案都是针对浏览器有意禁用的某些东西的变通方法,可能是出于安全原因。它们还都要求用户事先将其浏览器配置为兼容,因此对于供公众使用的网站可能不可行,但对于像我这样的本地托管解决方案来说却是理想的选择。

希望这有帮助! :)


佚名

有可能的。我搜索了整个网络,但是当我参加微软的一项调查时,我终于得到了答案。

尝试这个:

window.top.close();

这将为您关闭当前选项卡。


“脚本只能关闭它打开的窗口。”在 Chrome 50 上。
L
Leniel Maccaferri

试试这个。在所有三个主要浏览器上为我工作。

<!-- saved from url=(0014)about:internet -->
<a href="#" onclick="javascript:window.close();opener.window.focus();" >Close Window</a>

这里的许多其他技术对我不起作用,但确实如此,我使用的是 Google Chrome Version 88.0.4324.182 (Official Build) (64-bit)
不能在 chrome 96 中工作
T
Thailandian

以下在 Chrome 41 中适用于我:

function leave() {
  var myWindow = window.open("", "_self");
  myWindow.document.write("");
  setTimeout (function() {myWindow.close();},1000);
}

我已经为 FF 尝试了几个想法,包括打开一个实际的网页,但似乎没有任何效果。据我了解,任何浏览器都会使用 xxx.close() 关闭选项卡或窗口,如果它真的是由 JS 打开的,但至少 FF 不能通过在该选项卡中打开新内容来关闭选项卡。

当您考虑它时,这是有道理的——用户可能不希望 JS 关闭具有有用历史记录的选项卡或窗口。


Chrome:“未捕获的 TypeError:无法设置属性 'innerHTML' 为 null”
J
Julesfrog

在 FF 18 和 Chrome 24 中成功测试:

插入头部:

<script>
    function closeWindow() {
        window.open('','_parent','');
        window.close();
    }
</script> 

HTML:

<a href="javascript:closeWindow();">Close Window</a>

学分转到 Marcos J. Drake


没有在 chrome 上运行“脚本可能只关闭它打开的窗口。”
N
Nikos Hidalgo

对于仍在访问此页面的人,您只能关闭由脚本打开的选项卡或使用带有目标 _blank 的 HTML 的锚标记。这两个都可以使用

<script>
    window.close();
</script>

这适用于每个现代浏览器。 IE11 和 Edge 17 显示确认警报,但它仍然有效。
我很难让 Angular 应用程序真正从 Adfs 中注销。想知道关闭标签是否是最终退出的方式。那我会试试这个片段。
p
pikax
<button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>

这对我有用


在我们的 React 项目中不起作用,可能是因为我们使用的是 jsx 而不是普通的 html 和 javascript。我们得到与其他人相同的错误:脚本可能只关闭它们打开的窗口。
我发现在 Chrome 中,当标签未通过将 URL 粘贴到浏览器栏中首次打开时,它(至少)适用于本地文件。所以,它必须通过双击打开,从 VSCode 或其他任何东西,但出现黄色警告,只有当我通过 Ctrl-T 打开一个新选项卡并粘贴 URL 时它才起作用。
s
sir

保证在未来的任何浏览器中都不会允许关闭选项卡。使用上面提到的脚本是行不通的。

我的解决方案是使用 Chrome 扩展程序。 Chrome 扩展程序可能需要选项卡操作权限,因此可以轻松处理扩展程序内容脚本处于活动状态的域中的任何选项卡的关闭。

这是后台脚本的样子:

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
    console.log(sender)
    console.log(message)
    if(message.closeThis) {
        closeTab(sender.tab.id)
    }
});

const closeTab = id => {
    console.log("Closing tab");
    chrome.tabs.remove(id);
}

内容脚本应如下所示:

window.addEventListener("message", (event) => {
    // Only accept messages from ourselves
    if (event.source !== window)
        return;

    if (event.data.type && (event.data.type === "APPLICATION/CLOSE")) {
        console.log("Content script received APPLICATION/CLOSE event");
        chrome.runtime.sendMessage({closeThis: true});
    }
}, false);

通过在您的应用程序中调用它来关闭选项卡(通过在清单中指定来确保在您的域中启用了内容脚本):

window.postMessage({ type: "APPLICATION/CLOSE" }, "*");

使用它时要小心,因为 Chrome 扩展程序的部署可能会很痛苦。


这是 chrome 唯一可靠的选择
如果这是唯一可行的选择,那么在新标签页中打开并在共享后关闭的 Facebook 共享链接将无法正常工作——但据我所知,它们在所有浏览器中都可以。
V
VityaSchel

我只是想补充一下 window.close() works 在 2021 年,chrome 91,但并非总是如此。 如果选项卡中没有历史记录(您无法返回),它可以工作的一种情况。

就我而言,我想创建几秒钟后关闭的自毁选项卡,但我一直在努力避免使用新选项卡进入开发服务器,因为显然新选项卡也是选项卡,并且它被保存在选项卡历史记录中:DI 创建在 about:blank 选项卡中链接 target=_blank 属性,它导致 window.close() 方法最终起作用的新选项卡!


C
Community

这是解决相同问题的一种方法,像这样声明一个 JavaScript 函数

<script>
  function Exit() {
     var x=confirm('Are You sure want to exit:');
     if(x) window.close();
   }
</script>

将以下行添加到 HTML 以使用 <button> 调用函数

<button name='closeIt' onClick="Exit()" >Click to exit </Button>

U
UserName Name

您可以尝试使用此解决方案来欺骗浏览器使用 JavaScript + HTML 关闭当前窗口:

JS:

function closeWindow() {
 if(window.confirm('Are you sure?')) {
  window.alert('Closing window')
  window.open('', '_self')
  window.close()
 }
 else {
  alert('Cancelled!')
 }
}

HTML:

Some content
<button onclick='closeWindow()'>Close Current Window!</button>
More content

这太复杂了——就所使用的 JS 而言,而且还不必要地将 HTML 混入其中。
这是对我有帮助的答案!
D
Diego

以下是创建此类链接的方法:

<a href="javascript:if(confirm('Close window?'))window.close()">close</a>