【发布时间】:2018-04-23 05:03:01
【问题描述】:
当打开一个模态弹出对话框时,即使我添加了一个关闭按钮(通常是右上角的 X),一些手机用户也会使用他们的手机“后退按钮”来关闭弹出窗口。但相反,这将退出网站!
如何让移动端的“返回按钮”关闭弹窗而不是退出网站?
document.getElementById("link").onclick = function(e) {
e.preventDefault();
document.getElementById("popupdarkbg").style.display = "block";
document.getElementById("popup").style.display = "block";
document.getElementById('popupdarkbg').onclick = function() {
document.getElementById("popup").style.display = "none";
document.getElementById("popupdarkbg").style.display = "none";
};
return false;
}
#popup { display: none; position: fixed; top: 12%; left: 15%; width: 70%; height: 70%; background-color: white; z-index: 10; }
#popupdarkbg { position: fixed; z-index: 5; left: 0; top: 0; width: 100%; height: 100%; overflow: hidden; background-color: rgba(0,0,0,.75); display: none; }
<div id="main">
<a href="" id="link">Click me</a><br>
</div>
<div id="popup">This is a popup window! Click mobile "Back button"</div>
<div id="popupdarkbg"></div>
注意事项:
我已经看过这个 Codepen How to disable browser back button using JavaScript,但我不确定它是否可以在 Chrome、Firefox、Safari 和 Android、iOS 等上跨浏览器。
我已经看到有关
window.onpopstate = function () { history.go(1); };的答案,但我想确保这是在这里做的好习惯,(所以它不是它们的重复)。
【问题讨论】:
-
pushState在各种浏览器和平台上都得到了很好的支持,这种方法是一种常见的做法。除非您专门针对 IE9 或更低版本,否则一切正常。 -
@MátéSafranka 所以你会只在弹出窗口打开时做
window.onpopstate = function () { history.go(1); };,在弹出窗口关闭时做window.onpopstate = function () { };(或其他什么?)这样,当弹出窗口关闭时,他们仍然可以去返回上一个网站?
标签: javascript responsive-design modal-dialog back-button