internet explorer上的Javascript onbeforeunload问题

internet explorer上的Javascript onbeforeunload问题,javascript,internet-explorer,tabs,onbeforeunload,Javascript,Internet Explorer,Tabs,Onbeforeunload,这是我的剧本: <script type="text/javascript"> var redirectFlag = false; if (+localStorage.tabCount > 0) { alert('Already a tab or window opened!'); redirectFlag = true; } else { redirectFlag = false; loc

这是我的剧本:

<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>

var redirectFlag=false;
如果(+localStorage.tabCount>0){
警报('已打开选项卡或窗口!');
重定向标志=真;
}否则{
重定向标志=假;
localStorage.tabCount=0;
}
localStorage.tabCount=+localStorage.tabCount+1;
window.onbeforeunload=函数(){
localStorage.tabCount=+localStorage.tabCount-1;
};
如果(重定向标志){
var baseUrl=window.location.origin;
window.location.href=baseUrl+'mylocation';
}
我想检查是否打开了另一个选项卡。此脚本适用于firefox和chrome。但是在IE 11上,
窗口.onbeforeunload
被忽略


IE是否也有解决方法?谢谢

在卸载前事件中存在一些已知的问题。以下是其中一些:

将事件处理程序/侦听器附加到窗口或文档的beforeunload事件可防止浏览器使用内存中的页面导航缓存,如或

为了消除不必要的弹出窗口,浏览器可能不会显示在beforeunload事件处理程序中创建的提示,除非页面已与之交互,甚至可能根本不显示它们

参考:

如果目标浏览器支持,建议改用它。您可以在此处找到有关其支持的信息:

因此,您应该使用
onpagehide
,而不是在
onbeforeuload
事件处理程序中减少
localStorage.tabCount

window.onpagehide = function () {
  localStorage.tabCount = +localStorage.tabCount - 1;
};
您可以尝试以下代码笔,看看它是否适合您:


我不能完全确定您的方法,即在localStorage中保持计数是否理想。过去我曾为此目的使用过一个图书馆,它被证明是可靠的



注意:通过访问器
localStorage.tabCount等属性访问localStorage项是一种不好的做法。您可能遇到的一个常见问题是有人重写系统方法,例如
getItem
setItem

卸载前
事件存在几个已知问题。以下是其中一些:

将事件处理程序/侦听器附加到窗口或文档的beforeunload事件可防止浏览器使用内存中的页面导航缓存,如或

为了消除不必要的弹出窗口,浏览器可能不会显示在beforeunload事件处理程序中创建的提示,除非页面已与之交互,甚至可能根本不显示它们

参考:

如果目标浏览器支持,建议改用它。您可以在此处找到有关其支持的信息:

因此,您应该使用
onpagehide
,而不是在
onbeforeuload
事件处理程序中减少
localStorage.tabCount

window.onpagehide = function () {
  localStorage.tabCount = +localStorage.tabCount - 1;
};
您可以尝试以下代码笔,看看它是否适合您:


我不能完全确定您的方法,即在localStorage中保持计数是否理想。过去我曾为此目的使用过一个图书馆,它被证明是可靠的



注意:通过访问器
localStorage.tabCount等属性访问localStorage项是一种不好的做法。您可能遇到的一个常见问题是有人重写系统方法,例如
getItem
setItem

这种方式适用于IE11和最新的firefox浏览器chrome。没有检查opera、edge、safari或netscape

<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>

//仅当创建订单时
var redirectFlag=false;
如果(+localStorage.tabCount>0){
警报('已打开选项卡或窗口!');
重定向标志=真;
}否则{
localStorage.tabCount=0;
}
localStorage.tabCount=+localStorage.tabCount+1;
//为firefox工作;铬;ie11
window.addEventListener('onpagehide',函数(evt){
localStorage.tabCount=+localStorage.tabCount-1;
});
//如果打开了2个选项卡/窗口,则重定向用户
如果(重定向标志){
var baseUrl=window.location.origin;
window.location.href=baseUrl+'myurl';
}

这种方式适用于IE11和最新的firefox chrome。没有检查opera、edge、safari或netscape

<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>

//仅当创建订单时
var redirectFlag=false;
如果(+localStorage.tabCount>0){
警报('已打开选项卡或窗口!');
重定向标志=真;
}否则{
localStorage.tabCount=0;
}
localStorage.tabCount=+localStorage.tabCount+1;
//为firefox工作;铬;ie11
window.addEventListener('onpagehide',函数(evt){
localStorage.tabCount=+localStorage.tabCount-1;
});
//如果打开了2个选项卡/窗口,则重定向用户
如果(重定向标志){
var baseUrl=window.location.origin;
window.location.href=baseUrl+'myurl';
}

您遇到了什么样的错误?如果有的话?我没有任何错误你试过像<代码>窗口.addEventListener('beforeunload',function(){……这里发生了一些神奇的事情……})我用
addEventListener
试过了,但没有注意到您遇到了什么样的错误?如果有的话?我没有任何错误你试过像<代码>窗口.addEventListener('beforeunload',function(){……这里发生了一些神奇的事情……})
我用
addEventListener
试过,但它被忽略了
onpagehide
它在firefox和chrome上工作,但在IE中不工作11@Chester我认为IE在标签之间共享本地存储的方式上存在一些问题。检查此线程:@Chester看起来问题只与iframe有关,这解释了为什么Codepen不能按预期工作。如果您没有在页面中使用iframe,则不应该看到任何问题。问题文档:它在firefox和chrome上工作,但在IE中不工作11@Cheste