IE 踩坑合集

1 缓存 GET 请求,导致数据不是最新的

问题描述

登录和首页是两个页面。在登录页面登录成功之后,会自动跳转到首页。在未登录状态强行访问首页的话,会被踢回登录页面。
在其他浏览器中都没有问题,只有在 IE 浏览器中出现了 bug :登录成功之后自动跳转到首页,但是立刻又被踢回登录页面了。

原因

在默认情况下,IE会针对请求地址缓存 ajax 请求的结果。换句话说,在缓存过期之前,针对相同地址发起的多个 ajax
请求,只有第一次会真正发送到服务端。

在首页中,页面初始化的时候会发送一个请求 A,获取一些初始化参数的信息。

因为之前在未登录的状态下访问过首页,触发过请求A,返回值是 “未登录,不允许访问,踢回登录页面”

现在,我们在登录页面成功登录,自动跳转到首页,又一次触发了请求A。这一次请求 A 与之前不同,请求头中携带了我们的登录信息 token 。但是 IE 只根据请求地址判断是否用缓存,不会管你的请求头变不变,所以 IE 没有访问服务器,直接把缓存的内容返回了。页面收到了 “未登录,不允许访问,踢回登录页面”,所以又跳回到登录页。

解决

  1. 给所有请求添加时间戳,保证每次请求的地址都不同
  2. 给所有请求设置 cache:false

2 设置 X-UA-Compatible(已过时)

<meta http-equiv="X-UA-Compatible" content="IE=edge">

已过时:

If you need to support IE9 or IE8, then I would recommend using the tag. If you only support the latest browsers (IE11 and/or Edge) then I would consider dropping this tag altogether.

具体看这里:What does <meta http-equiv=“X-UA-Compatible” content=“IE=edge”> do?

3 让双核浏览器默认用 webkit 内核

目前仅360浏览器支持

<meta name="renderer" content="webkit">
发布了14 篇原创文章 · 获赞 30 · 访问量 6969

猜你喜欢

转载自blog.csdn.net/tangran0526/article/details/90171975
IE