我尝试通过单击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>
答案 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规范是各个供应商试图做到这一点的多年实验的主要共识结果。