IE6、IE7、IE8 无法正常读取 cookie 的解决方法

事件的起因是由于在工作中有客户反映,常常会有用户在浏览网页的过程中订购了商品,但是由于用户一下子打开的窗口过多,又或者在敲打键盘时,错误地按到了F5键,导致页面刷新或者不正常关闭,而这时在该网页上所做的一切操作的信息都丢失了,如果我们可以提供一个在客户信息未处理完成时的提示那该多好啊,下面的代码可以做到不管用户是点击了关闭,或者是在任务栏关闭、点击后退、刷新、按F5键,都可以检测到用户即将离开的消息。

本文章来给大家介绍IE6、IE7、IE8 无法正常读取 cookie
的解决方法,有需要了解的同学可进入参考。

Win10下IE浏览器无法正常使用的解决办法,win10ie

Win10下因为使用习惯的不同,有时候我们会碰到IE浏览器无法正常使用的情况,今天小编提供两种解决办法,希望能帮到大家。

首先,我们按下Win+R,打开运行。

vnsc威尼斯城官方网站 1

然后输入cmd,打开命令提示符。

vnsc威尼斯城官方网站 2

输入netsh winsock reset,并回车,会提示Winsock目录被重置。

vnsc威尼斯城官方网站 3

然后重启计算机,最后打开IE测试即可。

vnsc威尼斯城官方网站 4

 

vnsc威尼斯城官方网站
Win10下因为使用习惯的不同,有时候我们会碰到IE浏览器无法正常使用的情况,今天小编提供…

google浏览器window.onbeforeunload方法兼容问题
window.onbeforeunload方法在IE内核浏览器是有效的,但是在google浏览器中并不兼容,请教给位怎么在google浏览器中兼容window.onbeforeunload方法

复制代码 代码如下:

原因分析

<script type=”text/javascript” language=”javascript”>
function bindunbeforunload()
{
window.onbeforeunload=perforresult;
}
function unbindunbeforunload()
{
window.onbeforeunload=null;
}
function perforresult()
{
return”当前操作未保存,如果你此时离开,所做操作信息将全部丢失,是否离开?”;
}
</script>

很正常的写完了 JavaScript 代码,测试都已经通过,在 IE10 的 IE7、8、9
渲染模式下也测试通过。这时候,客户反馈在 XP 下的 IE8
有问题:初次登陆无法显示默认皮肤、点击切换刷新之后无法显示切换后的皮肤。

只需要将bindunbeforunload()方法注册到要检测的页面上即可,你可以在body的onload或者document.ready中注册这个方法,在这里我们采用的是window.onbeforeunload,即是在页面即将卸载之前弹出提示框,好的,现在来测试一下,测试代码:

因为是通过 cookie
来判断是否显示默认皮肤还是上次用户选择的皮肤,所以很理所当然就想到了无法读取
cookie 。启动 VMware 虚拟机,打开 IE8 和 IE Developer ToolBar
工具进行调试,发现点击之后 cookie
已经成功的创建,但是代码无法执行,使用控制台看了一下问题,原来是不支持
console 。

复制代码 代码如下:

XP 下的 IE 浏览器不支持 console 命令
console 命令是控制台命令,用来调试 JavaScript 代码用的,通常使用
console.log() 函数来代替 alert() 来迅速得到某变量的内容等。由于 XP 下的
IE 不支持 console,导致后续代码无法运行。

<html>
<head><title>this is id onbeforunload event
test</title>
</head>
<script type=”text/javascript” language=”javascript”>
function bindunbeforunload()
{
window.onbeforeunload=perforresult;
}
function unbindunbeforunload()
{
window.onbeforeunload=null;
}
function perforresult()
{
return”当前操作未保存,如果你此时离开,所做操作信息将全部丢失,是否离开?”;
}
</script>
<body onload=”javascript:return bindunbeforunload();”>
<h1>test is start</h1>
<input type=”button” value=”绑定事件” id=”btnBind” onclick=”return
biindunbeforunload();”/>
<input type=”button” value=”删除绑定事件” id=”btnUnBind”
onclick=”unbiindunbeforunload();”/>
</body>
</html>

解决方法就是删掉所有调试用的语句,这时候已经可以显示默认的皮肤样式了。

上面的代码就是我此次测试的所有代码了,现在刷新页面,嗯,很好,弹出了我们期望中的对话框。但是当我在IE下打开上述代码时,我的“删除事件绑定按钮”没有发挥作用,这让我很崩溃,国内3分之2的用户都在使用IE,特别是在使用该死的IE6、7,如果我的代码不能在IE6、7下正常的工作,那相当于我的工作是白做了,当然,奖金的那些事情就更不用想了。办法都是人想出来的,好吧,我利用一个全局变量来控制是否弹出对话框,修改后的”javascript”代码如下:

XP 下的 IE 浏览器不支持某些创建 cookie 的语句
这里之所以说某些,是因为我也不知道哪句代码写的不完善。当我使用最基础的
alert(document.cookie) 返回所有的 cookie 内容时,返回值为空,使用 cookie
读取函数读取某值的时候,返回 undefined
。而在其他浏览器中都可以正常返回。

复制代码 代码如下:

而奇怪的地方在于,我使用 IE developer toolbar
调试的时候,可以看到当前浏览器下面有 cookie 值。最初我以为是 cookie
读取函数写的有问题,因为毕竟有 cookie 的内容却读取不出来。前后换了 5
个不同写法的 cookie 读取函数。后来一想不对,因为使用
alert(document.cookie) 也无法返回任何内容,IE 不会连 document.cookie
都不支持吧?!难道是因为 cookie 生成函数?

<script type=”text/javascript” language=”javascript”>
var goodexit=false;
function bindunbeforunload()
{
goodexit=false;
window.onbeforeunload=perforresult;
}
function unbindunbeforunload()
{
goodexit=true;
window.onbeforeunload=null;
}
function perforresult()
{
if(!goodexit)
{
return”当前操作未保存,如果你此时离开,所做操作信息将全部丢失,是否离开?”;
}
}
</script>

这时候,客户给了个功能类似的示例网站,我打开测试了一下功能正常。既然别人的正常,肯定能实现。我阅读了一下它的代码,换肤功能使用的
styleswitcher.js 这个 JS
插件做出来的。由于实现步骤与现有网站不符,我无法使用这个插件整合,只能把它的生成
cookie 、读取 cookie 的函数抠下来用。代码如下:

同时调用删除绑定事件时,将变量goodexit的值更改为:true,表示用户是正常退出,这样自然不会弹出对话框了。
再测试一下,正常了,对,这就是我想要的结果!
本篇文章源于从Brandon
Himes处而得,并且还是从google快照,源文链接已找不到,本来想翻译的,但是本人水平实在有限,看得懂而已,如果翻译得不好反而招骂,如果朋友们想看源文,请直接点击这里,这是快照地址,可能一段时间后就不存在了。

 代码如下

您可能感兴趣的文章:

  • onbeforeunload与onunload事件异同点总结
  • 判断用户的在线状态
    onbeforeunload事件
  • 使用onbeforeunload属性后的副作用
  • 关闭浏览器时提示onbeforeunload事件

复制代码

function readCookie(name) {
  var nameEQ = name + “=”;
  var ca = document.cookie.split(‘;’);
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==’ ‘) c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return
c.substring(nameEQ.length,c.length);
  }
  return false;
}

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = “; expires=”+date.toGMTString();
  }
  else expires = “”;
  document.cookie = name+”=”+value+expires+”; path=/”;
}

无法正常读取
cookie 的解决方法,有需要了解的同学可进入参考。 原因分析 很正常的写完了
JavaScript 代码,…

相关文章