Chrome 36.0.1985.125 更新后 Javascript 无法关闭当前标签页

标签 javascript jquery google-chrome browser-tab

目前我有一个应用程序,用户点击 URL 并转到我的表单。然后用户将他的信息输入到表单字段中,然后通过 jquery ajax 将其发送到将其输入数据库的 PHP 脚本。成功回调后,它会提醒用户他们已经注册并关闭当前浏览器选项卡。 (假设我需要关闭浏览器选项卡行为才能持续存在)。

$.ajax({
    type: "POST",
    url: 'goToPHP',
    data: data,
    success: function(data){
       alert('You Have Been Registered Successfully');
       open(location, '_self').close();
    },
    error: function(data){
    }
});

我知道大多数现代浏览器(包括 Chrome)出于安全原因限制 javascript 仅关闭它创建的选项卡/窗口的能力。暂时我使用了 open(location, '_self').close(); 来解决这个问题,但是,唉,chrome 的最新更新似乎也阻止你这样做(提示你警告:“脚本可能只关闭它打开的窗口”。)

有解决办法吗?我不是在谈论以下内容:

open(location, '_self').close();  

但是一些可以在 Chrome 上一直有效的东西(例如更改 Chrome 设置以允许脚本关闭标签页/窗口(类似于如何通过 Firefox 中的 about:config 完成此操作)或一种重组用户点击表单的方式,以便窗口对象在 javascript 中可用,这样我就可以调用 windowObject.close(); )。

提前致谢!

最佳答案

A browsing context is script-closable if it is an auxiliary browsing context that was created by a script (as opposed to by an action of the user), or if it is a top-level browsing context whose session history contains only one Document.

http://www.w3.org/html/wg/drafts/html/master/browsers.html#dom-window-close

实际上这意味着,在通常情况下,您只能关闭您在 JavaScript 中创建的窗口/选项卡。但是,也可以关闭窗口或选项卡(但不能关闭框架或其他嵌套浏览上下文),只要该窗口或选项卡没有历史记录即可。通常,这是一个非常不可靠的功能,因为你通常不能现实地期望你的用户在打开你试图关闭的文档之前在他们的浏览上下文中没有打开任何文档;但是,在某些情况下,您可以安全地假设该页面处于没有历史记录的上下文中,但通常这些情况也属于“通过脚本打开”类别。

此外,如果您出于 JavaScript 目的使用指向“#”的链接或在您的页面中使用任何其他类型的书签链接,这将填充 session 历史记录并呈现上下文不可关闭,除非您使用 JavaScript 来防止超链接事件被执行。对于 JavaScript,如果这是一个问题,最好只使用 javascript:void(0)

在您的情况下,您可以保证可以关闭选项卡/窗口的唯一方法是,如果您可以保证您的表单是在没有历史记录的浏览上下文中打开的,或者您可以通过 JavaScript 打开表单页面。这些限制是否可以合理解决取决于您网站的具体结构/实现。

关于Chrome 36.0.1985.125 更新后 Javascript 无法关闭当前标签页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25030355/

相关文章:

javascript - d3.js 中带有阈值 slider 的强制布局中的链接断开

javascript - 获取上一页 URL,打开新窗口,然后通过 Javascript 重定向

javascript - Wordpress Ajax 返回 '0'

jquery - CSS Body 不可滚动?

javascript window.open 在 safari 和 chrome 中不起作用

javascript - 调度 `retrieveSportsDetails` 函数,但我不确定如何编写 `if` 条件

javascript - Keypress 在 IE 中不起作用(Keydown 和 Keyup 发布表单)

javascript - 最新的jquery日期选择器,更改默认日期

google-chrome - Chrome 将数据从后台页面发送到浏览器操作

jQuery 文本 slider 在 Chrome 中不起作用