普通的javascript不能随意关闭windows。这是不久前引入的一种安全功能,用于阻止各种恶意攻击和骚扰。
这个
close()
方法,如果满足以下所有条件,则应关闭浏览上下文
一个
:
相应的浏览上下文
一个
是
脚本可关闭
.
现有脚本的浏览上下文熟悉浏览上下文
一个
.
允许现有脚本的浏览上下文导航浏览上下文
一个
.
浏览上下文是
脚本可关闭
如果它是辅助浏览上下文
是由脚本创建的
(与用户的操作相反),或者是会话历史记录只包含一个文档的浏览上下文。
这意味着,除了一个小小的例外,
不允许javascript关闭不是由同一javascript打开的窗口。
仅允许对使用
window.open
方法。
如果你想用
window.close
从Greasemonkey/Tampermonkey/userscript可以得到:
火狐:
错误消息
Scripts may not close windows that were not opened by script.
"
铬:
只是默默地失败。
长期解决方案:
最好的办法是
改用Chrome扩展和/或Firefox插件。
它们可以可靠地关闭当前窗口。
但是,由于
窗口关闭
,对于Greasemonkey/Tampermonkey脚本来说要少得多;Greasemonkey和Tampermonkey可以在其API中合理地提供此功能(基本上为您打包扩展工作)。
考虑提出功能请求。
繁琐的工作区:
铬
目前
易受“自我重定向”攻击。所以像这样的代码通常是有效的:
open(location, '_self').close();
国际海事组织(IMO)称,这是一种小车行为,目前(截至2015年4月左右)大多被阻止。它仍然可以工作
注入
代码
只有
如果选项卡是新打开的并且在浏览历史记录中没有页面。所以它只在很小的情况下才有用。
然而,
Chrome(v43&v44)和Tampermonkey(v3.11或更高版本)上仍有一个变体
. 使用显式
@grant
平淡的
窗口。关闭()
. 如:
// ==UserScript==
// @name window.close demo
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant GM_addStyle
// ==/UserScript==
setTimeout (window.close, 5000);
多亏了
zanetu
为了更新。请注意,如果只有一个选项卡处于打开状态,则此操作将不起作用。它只关闭其他选项卡。
火狐
是安全的。所以,唯一的javascript方法就是破坏安全设置,一次一个浏览器。
你可以敞开心扉
about:config
并设置
allow_scripts_to_close_windows
到
true
.
如果你的剧本是供个人使用的,那就去做吧。如果你要求其他人打开这个设置,他们会很聪明,也有理由,带着偏见拒绝。
目前还没有与Chrome相同的设置。