这是我的剧本:
<script type="text/javascript">
var redirectFlag = false;
if (+localStorage.tabCount > 0) {
alert('Already a tab or window opened!');
redirectFlag = true;
} else {
redirectFlag = false;
localStorage.tabCount = 0;
}
localStorage.tabCount = +localStorage.tabCount + 1;
window.onbeforeunload = function () {
localStorage.tabCount = +localStorage.tabCount - 1;
};
if (redirectFlag) {
var baseUrl = window.location.origin;
window.location.href = baseUrl + 'mylocation';
}
</script>
我想检查是否打开了另一个标签。这个脚本适用于firefox和chrome。但是在IE 11上,window.onbeforeunload
被忽略了。
是否有针对IE执行此操作的解决方法?谢谢
答案 0 :(得分:2)
beforeunload
事件有几个已知问题。以下是其中一些:
将事件处理程序/侦听器附加到窗口或文档的beforeunload事件可防止浏览器使用内存页面导航缓存,例如Firefox's Back-Forward cache或WebKit's Page Cache。
为了防止不需要的弹出窗口,浏览器可能无法显示在beforeunload事件处理程序中创建的提示,除非页面已与之交互,或甚至可能根本不显示。
参考:https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload
如果目标浏览器支持,建议使用pageHide
event。您可以在此处找到它的支持:https://caniuse.com/#search=pagehide
因此,您应该使用localStorage.tabCount
而不是减少onbeforeunload
事件处理程序中的onpagehide
:
window.onpagehide = function () {
localStorage.tabCount = +localStorage.tabCount - 1;
};
您可以尝试使用以下代码笔查看它是否适合您: https://codepen.io/Nisargshah02/pen/eMXMGE?editors=1011
我不完全确定你的方法 - 即如果保持localStorage的计数是理想的。在过去,我使用了一个库Crosstab来实现这个目的,事实证明它是可靠的。
注意:通过类似属性的访问者localStorage.tabCount
访问localStorge项目是一种不好的做法。您可能遇到的一个常见问题是有人会覆盖getItem
或setItem
等系统方法。
答案 1 :(得分:0)
这种方式适用于IE11和最新的firefox,chrome。没有检查歌剧,边缘,野生动物园或网景。
<script type="text/javascript">
//only when an order is created
var redirectFlag = false;
if (+localStorage.tabCount > 0) {
alert('Already a tab or window opened!');
redirectFlag = true;
} else {
localStorage.tabCount = 0;
}
localStorage.tabCount = +localStorage.tabCount + 1;
//works for firefox;chrome;ie11
window.addEventListener('onpagehide', function (evt) {
localStorage.tabCount = +localStorage.tabCount - 1;
});
//redirect user if there are 2 tabs/windows opened
if (redirectFlag) {
var baseUrl = window.location.origin;
window.location.href = baseUrl + 'myurl';
}
</script>