场景:如果对于a标签只是用于显示且他的href被设置成了javascript:void(0);的话。
悲剧:会触发window的beforeunload事件。
PS:在IE6里面会将长连接给断掉。
解决方式:在标签上面添加一个onclick事件
<a href="javascript:void(0);" onclick="return false;">xxx</a>
场景:为了兼容各个浏览器,在获取DOM的head的时候,每个浏览器有各自的写法
悲剧:需要兼容各个浏览器
解决方案:
var doc = document; var head = doc.head || doc.getElementsByTagName('head')[0] || doc.documentElemenet;
场景:在IE下面获取回车键的事件。
悲剧:由于各个浏览器的处理方式的不同,所以要写兼容性的js代码
解决方案
function fuckIE(e){ var event = e || window.event; // 获取到这个对象的DOM元素 var target = event.target || event.srcElement; // 获取到当前按键的unicode值 var which = target.which || event.keyCode;
场景:为了获取到当前浏览器窗口的宽和高
悲剧:对于IE和其他浏览器,支持js获取窗口的宽和高的方法是不一样的
解决方案:兼容性的写法
//对于 chrome,firefox等其他浏览器 var height = document.innerHeight; var width = document.innerWidth; // 对于IE6,IE7,IE8 var BSieHeight = document.documentElement.clientHeight || document.body.clientHeight; var BSieWidth = document.documentElement.clientWidth || document.body.clientWidth; // 所以兼容性的写法就是 var height = document.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;; var width = document.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;;
在IE下面使用javascript做跳转,例如
var win = null; win = window.open('about:blank','','height=700,width=800,top=100,left=100'); setTimeout(function(){ win.location.href = "http://xxx.com"; },250); return false;
这个时候,对于新打开的窗口中的header中的referer就会变成空,为什么呢?
悲剧:因为IE做了清空处理,而其他保留了这个字段。
解决方案:前端通过测试是否是IE,如果是的花,手动添加一个referer
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) || /MSIE(\d+\.\d+);/.test(navigator.userAgent)){ var referLink = document.createElement('a'); referLink.href = url; document.body.appendChild(referLink); referLink.click(); } else { location.href = url; }
场景:有的时候我们需要判断所在的浏览器是否是IE来写一些兼容性的代码,这个时候就需要判断该浏览器是否是IE了
悲剧:无
解决方案:
1.可以通过判断document.all的返回值来判断该浏览器是否是IE,因为只有在IE(6,7,8,..)中document.all的返回值为true,而其他浏览器的返回值为false
<script type="text/javascript"> window.onload = function() { document.getElementById("info").innerHTML = "!!document.all : " + !!document.all; } </script> <span id="SPAN1"></span> <div id="info"></div>
2.如果你使用了jquery作为开发库,这个时候就可以使用jquery提供的判断该浏览器是否是IE,并且还能够获取对应的版本号:
$.browser $.browser.version
PS:对于IE8,在兼容模式下面,获取到的版本号是7
详细的使用方法请到官网查看:http://api.jquery.com/jQuery.browser/
3.如果你使用到了淘宝的Arale类库,里面提供了插件detector-客户端信息识别模块,功能更加的强大,不仅能够识别出PC浏览器,而且还能够识别出手机端的信息版本
// 判断浏览器
detector.browser.name === "chrome" // true
// 判断浏览器名方法 2.!!detector.browser.ie // false
// 判断老旧浏览器if(detector.browser.ie && detector.browser.version < 8){ alert("你的浏览器太老了。"); }// 判断 Trident 4(IE8) 以下版本浏览器引擎if(detector.engine.trident && detector.engine.mode < 4){ // hack code.}// 收集客户端详细信息detector.browser.name + "/" + detector.browser.fullVersion;
PS:详情的使用方法请查看官网提供的文档:http://aralejs.org/detector/