Chrome 36.0.1985.125更新后,Javascript无法关闭当前选项卡



目前我有一个应用程序,其中用户点击一个URL,并前往我的表单。然后用户将信息输入到表单字段中,然后通过jquery ajax发送给PHP脚本,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();)。

提前感谢!

如果浏览上下文是由脚本创建的辅助浏览上下文(与用户的操作相反),或者是会话历史仅包含一个Document的顶级浏览上下文,则浏览上下文是脚本可关闭的。

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

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

另外,如果你使用一个链接到'#'的JavaScript目的或任何其他类型的书签链接在你的页面,这将填充会话历史和渲染上下文不可关闭,除非你使用JavaScript来防止超链接事件被执行。对于JavaScript而言,如果这是一个问题,那么使用javascript:void(0)可能是更好的做法。

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

您只能关闭自己创建的窗口/选项卡。那就是你无法以编程方式关闭用户创建的窗口/选项卡。

例如,如果你用window.open()创建了一个窗口,你可以关闭它

为了使你的代码工作,你应该使用JavaScript打开一个窗口,然后你将能够通过代码关闭它。您可以使用下面的示例代码:

<script>
function openwindow() {
  var pop = window.open("localhost","Ratting","width=550,height=170,0,status=0,")
    var close = function() {
        pop.close();
    };
    setTimeout(close, 2000);
}    
</script>
<body>
    <a href="javascript:void(0);" name="Window_Name" title="title_here" onClick="openwindow()" >Click here to open the child window</a>
</body>

你可以在ajax URL和ajax success阶段使用这个概念。

$.ajax({
        type: "POST",
        url: function(){
              var pop = window.open("localhost","Ratting","width=550,height=170,0,status=0,")
               },
        data: data,
        success: function (resp) {
                  var close = function() {
                  pop.close();
                };
    setTimeout(close, 3000); // close after 3 seconds
        },
        error: //error code
        }
    });

HTML

<a class="closeButton">Close</a>
JavaScript

$('.closeButton').click(function () {
    close();
});

您不必使用window.closed()或重新打开选项卡并关闭。
就用这个代码吧。

我曾经使用window.open(…).close()技巧(不再适用于Chrome或FireFox)。在我的例子中,(Java)应用程序中有一个退出按钮,它不是试图关闭浏览器选项卡,而是清理,重定向回起始页面并终止。然后用户可以决定:

  • 手动关闭
  • 选项卡
  • 保持打开,或者
  • 重新进入应用程序

我意识到我的真正目标不是关闭浏览器选项卡,而是以一种明显的方式通知用户会话结束。

相关内容

  • 没有找到相关文章

最新更新