js前端关闭谷歌标签方法

JavaScript015

js前端关闭谷歌标签方法,第1张

关于javascript:如何使用API关闭Google Chrome窗口中的所有标签

google-chromegoogle-chrome-extensionjavascript

How I can close all tabs in Google Chrome window using API

我需要通过扩展程序关闭Chrome窗口中的所有标签。 现在的最佳做法是什么? 你会怎么做?

相关讨论

关闭当前选项卡的可能重复项

我建议不要编写恶意软件。恶意软件是指超出您正在开发的软件范围之外的,超出应用程序正常范围来控制或更改计算机(及其应用程序)状态的软件。您要编写的扩展名所做的事情超出了软件的限制范围。关闭不属于您的窗口。您不会去邻居家就开门而不会敲门,这从概念上讲与您编写代码的方式一致。

不正确的副本; Chrome扩展程序将使用chrome.tabs API。但是,这个问题太广泛了。

也没有选项卡,Chrome窗口将不存在。如果关闭所有选项卡,则窗口也将关闭。如果那是您想要的,则最好关闭窗口,而不是关闭选项卡。如果那不是您想要的,那么您肯定没有弄清楚。

如果您确实需要关闭Google Chrome浏览器窗口。 (出于个人原因,而不是为了创建恶意软件),您可以将自己的API编写到Chrome核心中并构建自己的浏览器。

JS 关闭网页,之前通过以上方式,可以解决Firefox chrome等浏览器不兼容的问题,但是随着浏览器版本升级,现在无效了。会提示:

Scripts may close only the windows that were opened by it.

2

那么如下写法可以解决该问题: 即,如果是以下浏览器,则设置当前页为空白页。

$("#closeBtn").click(function(){

var userAgent = navigator.userAgent

if (userAgent.indexOf("Firefox") != -1 || userAgent.indexOf("Chrome") !=-1) {

window.location.href="about:blank"

} else {

window.opener = null

window.open("", "_self")

window.close()

}})

})

遇到同样的问题,说明下:

Chrome自version37起已经默认停止了对window.showModalDialog的支持(可以修改注册表获得2015年5月之前,这种修改都有效)。

而对于从浏览器手动打开的非modal的窗口,在我意识到self close问题以来,Chrome都是不支持的——比如你给自己的page做了个logout的功能,点击之后想用你提到的self close方法关闭这个page,在Chrome上是关不掉的(但是你可以指定到另一个显示logout状态page,效果一样,logout也不一定就非要把那页关掉不是)。

既然它现在停止了支持showModalDialog,非modal窗口又不允许self close,那全面取缔从代码里self close也是情理之中迟早的事情吧。

解决方案:

对于解决showModalDialog问题,你可以自己用iframe之类的自己去模拟一个modal窗口,就像微博的转发窗口,点开之后用户将无法操作原页面的其他element。但是模拟的话,主要会遇到JS继续执行的问题,showModalDialog是会阻止原页面JS继续执行的,直到获取到新窗口的的返回结果,自己模拟这个行为的话,可以考虑call back方式,时间篇幅所限,不细说了哈,想取代showModalDialog都遇到这个问题,网上应该能搜到不少封装好的方法。

再说一点你需要自己写一个showModalDialog的原因,在Chrome宣布停止支持showModalDialog之后,FireFox也首次在文档和DebugTool里标明他们也会停止对showModalDialog的支持。暂时还没正式停止,大概是在等用户对Chrome这个操作的反应。

showModalDialog原来毕竟是IE独有的东西,一直没纳入W3C标准。Chrome对它的支持一直很差,比如从一个page打开showModalDialog,你还可以去其他page操作,也可以查看原page,甚至可以在原page上操作,只是这些操作只有在你关闭了showModalDialog之后才会起作用。

但是FireFox对showModalDialog的支持其实一直是很好的,基本跟IE上用起来基本无差,但是IE也在慢慢遵循W3C标准(特别是新出的IE11),FireFox抛弃showModalDialog也是早晚的事情。

最后,自己"画"的modal dialog完全在你的控制之下,可以暴露一个close接口来允许从子窗口里关闭父窗口打开的modal dialog。

(近期没少受此困扰,码了这么多,跟吐槽似的了……)