如何通过单击HTML中的按钮关闭当前选项卡?

时间:2016-04-05 11:14:22

标签: javascript jquery html html5

我尝试通过单击HTML页面内的按钮来关闭浏览器的当前选项卡,因为用户不应该返回上一个链接,我试图强制用户启动它再次...... 有没有办法这样做?

    <div class="form-group col-lg-12 pad0 mt10">
       <div class="a-center">
           <input id="cLReq" class="btn btn-danger" ng-click="window.close()" type="button" value="Close the Window"></input>
       </div>
    </div>

1 个答案:

答案 0 :(得分:4)

您可以使用window.close()关闭窗口,如果允许您的脚本关闭窗口。浏览器只会在some situations

中让代码关闭窗口(标签)
  

如果满足以下所有条件,则Window对象上的close()方法应该关闭浏览上下文A:

     
      
  • 相应的浏览上下文A可以关闭脚本。
  •   
  • 现任设置对象指定的负责任浏览上下文熟悉浏览上下文A。
  •   
  • 允许现任设置对象指定的负责任浏览上下文导航浏览上下文A。
  •   
     

如果浏览上下文是由脚本创建的辅助浏览上下文(而不是用户的操作),或者如果它是一个其会话历史记录仅包含一个Document的浏览上下文,则浏览上下文可以关闭脚本。

以下是一个例子:

HTML:

<input type="button" id="btn-immediate" value="Close Immediately">
<input type="button" id="btn-delay" value="Close After Delay">
<div>Auto close in: <span id="countdown"></span></div>

JavaScript的:

document.getElementById("btn-immediate").addEventListener("click", function() {
    // Close in direct response to a user action
    console.log("Calling window.close");
    window.close();
    console.log("Done calling window.close");
}, false);

document.getElementById("btn-delay").addEventListener("click", function() {
    // Close in an INdirect response to a user action
    console.log("Scheduling timed callback");
    setTimeout(function() {
        console.log("Calling window.close");
        window.close();
        console.log("Done calling window.close");
    }, 0);
}, false);

// Auto close after 15 seconds
var counter = 15;
tick();
function tick() {
    if (--counter == 0) {
        window.close();
        document.getElementById("countdown").innerHTML = "If the page is still here, auto-close failed";
    } else {
        document.getElementById("countdown").innerHTML = counter;
        setTimeout(tick, 1000);
    }
}

如果您right-click and open this page in a new tab,请按照该页面中的链接转到上面带代码的页面,您会发现至少有一个,可能是所有三个window.close()来电以上将失败(取决于浏览器),因为浏览上下文的历史记录不为空。但是如果你right-click and open that same page directly,由于浏览上下文没有历史记录,大多数(如果不是全部)都可以使用。

浏览器供应商一直在努力使脚本代码尽可能地做,同时仍然确保用户负责浏览器。有一段时间,您只能在直接响应用户操作时调用window.close(),但这种限制性太强。 HTML5规范是各个供应商试图做到这一点的多年实验的主要共识结果。