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