首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >window.close和self.close不会关闭Chrome中的窗口

window.close和self.close不会关闭Chrome中的窗口
EN

Stack Overflow用户
提问于 2013-11-04 11:33:03
回答 16查看 646.1K关注 0票数 198

问题是,当我调用window.close()self.close()时,它不会关闭窗口。现在似乎有一种信念,在Chrome中,你不能通过脚本关闭任何不是脚本创建的窗口。这显然是错误的,但不管它应该仍然这样做,即使它需要弹出一个警报进行确认。这些都不会发生。

那么,有没有人有真正的、实用的、经过验证的方法,可以使用像javascript:window.close()javascript:self.close()这样的东西来关闭窗口,这样就可以在所有不是基于Chrome的浏览器中正常运行呢?任何建议都将非常感谢,我正在寻找Javascript的具体解决方案,没有JQuery或第三方实施。

更新: close虽然许多建议都有严重的局限性和可用性问题,但在脚本标题中使用// @grant window.close的最新建议(特定于)甚至在那些通常不能处理close方法的选项卡上也能做到这一点。虽然不是完全理想,也不是适用于所有情况,但在我的情况下,这是一个很好的解决方案。

EN

回答 16

Stack Overflow用户

发布于 2014-07-21 07:11:16

Chrome修复了36.0.1985.125版本的安全问题

Chrome 36.0.1985.125,2014年7月16日星期三,Release note

据我观察,此更新修复了使用window.close()关闭弹出窗口的问题。当它失败时,您将在控制台中看到这一点,“脚本可能只关闭由它打开的窗口。”这意味着在最新的版本中,可能无法在上工作。

因此,在之前的Chrome发布版本中,下面的代码块可能可以工作,但不适用于此更新。

代码语言:javascript
复制
window.open('', '_self', '');
window.close();

对于此更新,您必须相应地更新代码以关闭弹出窗口。其中一种解决方案是获取弹出窗口id并使用

代码语言:javascript
复制
chrome.windows.remove(integer windowId, function callback)

方法将其移除。Chrome扩展windows API可以在chrome.windows上找到。

实际上,我的chrome扩展MarkView就面临着这个问题,我不得不更新我的代码以使其适用于此Chrome更新。顺便说一下,MarkView是一个读写优秀的Markdown文件的工具,它提供了包括内容大纲、可排序表格和代码块语法突出显示的功能。

我还创建了this post,欢迎发表任何意见。

票数 34
EN

Stack Overflow用户

发布于 2016-01-19 19:30:15

在TAMPER猴子中,你现在可以使用

代码语言:javascript
复制
// @grant        window.close

然后简单地调用

代码语言:javascript
复制
window.close();
票数 24
EN

Stack Overflow用户

发布于 2014-05-15 21:30:01

实现此功能的要求:

您必须从窗口启动器打开窗口/选项卡,才能获得javascript句柄才能使其工作,因为它并不总是在不是通过窗口启动器脚本打开的选项卡上工作。此测试页显示如何执行以下操作:

http://browserstrangeness.bitbucket.io/window_close_tester.htm

如果你在我的启动器中看不到它的工作,发布你的浏览器,你的设备和版本是必要的。不同版本的浏览器在不同设备上的行为不同。(例如iPads上的火狐和Chrome并不是他们所说的那样。它们是不同皮肤的Safari!)

所以很重要的一点是,比如说,我要说‘我在使用iOS14.5的iPad上使用Safari10.14’,这样我(或者stackoverflow上的其他一些有帮助的人)就可以为你研究它,并发布结果来帮助其他用户。提前感谢你这么做。如果您使用启动程序,并且它在我的示例中为您工作,那么它也工作。

我正在使用Brock发布的方法,它甚至可以在Firefox中工作,如果用户是通过按钮或链接从另一个窗口启动的话。

代码语言:javascript
复制
open(location, '_self').close();

我是通过按下按钮来调用它的,所以它是用户启动的,它仍然可以在Chrome90,Internet Explorer11,Edge,Safari7-10和Firefox35& 88上正常工作。我使用8.1 & 10版本的Windows和Mac 10.6、10.9 & 10.10 & 10.14进行了测试。

自动关闭窗口代码(在自动关闭的页面上)

在可以自动关闭的用户打开的窗口上使用的完整代码:

window_to_close.htm

JavaScript:

代码语言:javascript
复制
function quitBox(cmd)
{   
    if (cmd=='quit')
    {
        open(location, '_self').close();
    }   
    return false;   
}

HTML:

代码语言:javascript
复制
<input type="button" name="Quit" id="Quit" value="Quit" onclick="return quitBox('quit');" />

下面是一个测试页面和一个工作示例:(现在在Chrome 90.0和Firefox 88.0上进行了测试--都是在Windows 10和Mac 10.14 Mojave上)

http://browserstrangeness.bitbucket.io/window_close_tester.htm

窗口打开程序代码(在打开上面页面的页面上)

要实现这一点,基于安全性的跨浏览器兼容性要求,要关闭的窗口必须已经由用户单击同一站点域内的按钮打开。

例如,使用上面的方法关闭自身的窗口,可以使用以下代码从页面打开(代码来自上面链接的示例页面):

window_close_tester.htm

JavaScript:

代码语言:javascript
复制
function open_a_window() 
{
    window.open("window_to_close.htm"); 

    return false;
}

HTML:

代码语言:javascript
复制
<input type="button" onclick="return open_a_window();" value="Open New Window/Tab" />
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19761241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档