问题是,当我调用window.close()
或self.close()
时,它不会关闭窗口。现在似乎有一种信念,在Chrome中,你不能通过脚本关闭任何不是脚本创建的窗口。这显然是错误的,但不管它应该仍然这样做,即使它需要弹出一个警报进行确认。这些都不会发生。
那么,有没有人有真正的、实用的、经过验证的方法,可以使用像javascript:window.close()
或javascript:self.close()
这样的东西来关闭窗口,这样就可以在所有不是基于Chrome的浏览器中正常运行呢?任何建议都将非常感谢,我正在寻找Javascript的具体解决方案,没有JQuery或第三方实施。
更新: close虽然许多建议都有严重的局限性和可用性问题,但在脚本标题中使用// @grant window.close
的最新建议(特定于)甚至在那些通常不能处理close方法的选项卡上也能做到这一点。虽然不是完全理想,也不是适用于所有情况,但在我的情况下,这是一个很好的解决方案。
发布于 2014-07-21 07:11:16
Chrome修复了36.0.1985.125版本的安全问题
Chrome 36.0.1985.125,2014年7月16日星期三,Release note
据我观察,此更新修复了使用window.close()
关闭弹出窗口的问题。当它失败时,您将在控制台中看到这一点,“脚本可能只关闭由它打开的窗口。”这意味着在最新的版本中,可能无法在上工作。
因此,在之前的Chrome发布版本中,下面的代码块可能可以工作,但不适用于此更新。
window.open('', '_self', '');
window.close();
对于此更新,您必须相应地更新代码以关闭弹出窗口。其中一种解决方案是获取弹出窗口id并使用
chrome.windows.remove(integer windowId, function callback)
方法将其移除。Chrome扩展windows API可以在chrome.windows上找到。
实际上,我的chrome扩展MarkView就面临着这个问题,我不得不更新我的代码以使其适用于此Chrome更新。顺便说一下,MarkView是一个读写优秀的Markdown文件的工具,它提供了包括内容大纲、可排序表格和代码块语法突出显示的功能。
我还创建了this post,欢迎发表任何意见。
发布于 2016-01-19 19:30:15
在TAMPER猴子中,你现在可以使用
// @grant window.close
然后简单地调用
window.close();
发布于 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中工作,如果用户是通过按钮或链接从另一个窗口启动的话。
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:
function quitBox(cmd)
{
if (cmd=='quit')
{
open(location, '_self').close();
}
return false;
}
HTML:
<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:
function open_a_window()
{
window.open("window_to_close.htm");
return false;
}
HTML:
<input type="button" onclick="return open_a_window();" value="Open New Window/Tab" />
https://stackoverflow.com/questions/19761241
复制相似问题