WEB 浏览器兼容 推荐收藏


Posted in Javascript onMay 14, 2010

并不一定全,有的也可能不准确,比如新出的IE8、 Chrome等都没有太多涉及,虽然最近做的一些项目也兼容了IE8、Chrome等,但都没来的及总结进去,后来就忘了...汗。大家一起慢慢完善吧。

javascript部分

1. document.form.item 问题
问题:
代码中存在 document.formName.item("itemName") 这样的语句,不能在FF下运行
解决方法:
改用 document.formName.elements["elementName"]

2. 集合类对象问题
问 题:
代码中许多集合类对象取用时使用(),IE能接受,FF不能
解决方法:
改用 [] 作为下标运算,例:
document.getElementsByName("inputName")(1) 改为 document.getElementsByName("inputName")[1]

3. window.event
问题:
使用 window.event 无法在FF上运行
解决方法:
FF的 event 只能在事件发生的现场使用,此问题暂无法解决。可以把 event 传到函数里变通解决:
onMouseMove = "functionName(event)"
function functionName (e) {
    e = e || window.event;
    ......
}

4. HTML对象的 id 作为对象名的问题
问 题:
在IE中,HTML对象的 ID 可以作为 document 的下属对象变量名直接使用,在FF中不能
解决方法:
使用对象 变量时全部用标准的 getElementById("idName")

5. 用 idName 字符串取得对象的问题
问 题:
在IE中,利用 eval("idName") 可以取得 id 为 idName 的HTML对象,在FF中不能
解决方法:
用 getElementById("idName") 代替 eval("idName")

6. 变量名与某HTML对象 id 相同的问题
问题:
在FF中,因为对象 id 不作为HTML对象的名称,所以可以使用与HTML对象 id 相同的变量名,IE中不能
解决方法:
在声明变量时,一律加上 var ,以避免歧义,这样在IE中亦可正常运行
最好不要取与HTML对象 id 相同的变量名,以减少错误

7. event.x 与 event.y 问题
问题:
在IE中,event 对象有x,y属性,FF中没有
解决方 法:
在FF中,与 event.x 等效的是 event.pageX ,但event.pageX IE中没有
故采用 event.clientX 代替 event.x ,在IE中也有这个变量
event.clientX 与 event.pageX 有微妙的差别,就是滚动条
要完全一样,可以这样:
mX = event.x ? event.x : event.pageX;
然 后用 mX 代替 event.x

8. 关于frame
问题:
在IE中可以用 window.testFrame 取得该frame,FF中不行
解决方法:
window.top.document.getElementById("testFrame").src = 'xx.htm'
window.top.frameName.location = 'xx.htm'

9. 取得元素的属性
在FF中,自己定义的属性必须 getAttribute() 取得

10. 在FF中没有 parentElement,parement.children 而用 parentNode,parentNode.childNodes
问题:
childNodes 的下标的含义在IE和FF中不同,FF的 childNodes 中会插入空白文本节点
解决方法:
可以通过 node.getElementsByTagName() 来回避这个问题
问题:
当html中节点缺失时,IE和FF对 parentNode 的解释不同,例如:
<form>
<table>
<input/>
</table>
</form>
FF 中 input.parentNode 的值为form,而IE中 input.parentNode 的值为空节点
问题:
FF中节点自 己没有 removeNode 方法
解决方法:
必须使用如下方法 node.parentNode.removeChild(node)

11. const 问题
问题:
在IE中不能使用 const 关键字
解决方法:
以 var 代替

12. body 对象
FF的 body 在 body 标签没有被浏览器完全读入之前就存在,而IE则必须在 body 完全被读入之后才存在
这会产生在IE下,文档没有载入完时,在body上appendChild会出现空白页面的问题
解决方法:
一 切在body上插入节点的动作,全部在onload后进行

13. url encoding
问 题:
一般FF无法识别js中的&
解决方法:
在js中如果书写url就直接写&不要写&

14. nodeName 和 tagName 问题
问题:
在FF中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值,在IE中,nodeName 的使用有问题
解决方法:
使用 tagName,但应检测其是否为空

15. 元素属性
IE下 input.type 属性为只读,但是FF下可以修改

16. document.getElementsByName() 和 document.all[name] 的问题
问题:
在IE中,getElementsByName()、 document.all[name] 均不能用来取得 div 元素
是否还有其它不能取的元素还不知道(这个问题还有争议,还在研究中)

17. 调用子框架或者其它框架中的元素的问题
在IE中,可以用如下方法来取得子元素中的值
document.getElementById("frameName").(document.)elementName
window.frames["frameName"].elementName
在 FF中则需要改成如下形式来执行,与IE兼容:
window.frames["frameName"].contentWindow.document.elementName
window.frames["frameName"].document.elementName

18. 对象宽高赋值问题
问题:
FireFox中类似 obj.style.height = imgObj.height 的语句无效
解决方法:
统一使用 obj.style.height = imgObj.height + "px";

19. innerText的问题
问题:
innerText 在IE中能正常工作,但是 innerText 在FireFox中却不行
解决方法:
在非IE浏览器中使用textContent代替innerText

20. event.srcElement和event.toElement问题
问题:
IE下,even对象有 srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性
解 决方法:
var source = e.target || e.srcElement;
var target = e.relatedTarget || e.toElement;

21. 禁止选取网页内容
问 题:
FF需要用CSS禁止,IE用JS禁止
解决方法:
IE: obj.onselectstart = function() {return false;}
FF: -moz-user-select:none;

22. 捕获事件
问 题:
FF没有setCapture()、releaseCapture()方法
解决方法:
IE:
obj.setCapture();
obj.releaseCapture();
FF:
window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);
if (!window.captureEvents) {
       o.setCapture();
}else {
       window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
}
if (!window.captureEvents) {
       o.releaseCapture();
}else {
       window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);
}

CSS部分

div类

1. 居中问题
div里的内容,IE默认为居中,而FF默认为左对齐
可以尝试增加代码margin:auto

2. 高度问题
两上下排列或嵌套的div,上面的div设置高度(height),如果div里的实际内容大于所设高度,在FF中 会出现两个div重叠的现象;但在IE中,下面的div会自动给上面的div让出空间
所以为避免出现层的重叠,高度一定要控制恰当,或者干脆不写 高度,让他自动调节,比较好的方法是 height:100%;
但当这个div里面一级的元素都float了的时候,则需要在div块的最后,闭 和前加一个沉底的空div,对应CSS是:
.float_bottom {clear:both;height:0px;font-size:0px;padding:0;margin:0;border:0;line-height:0px;overflow:hidden;}

3. clear:both;
不想受到float浮动的,就在div中写入clear:both;

4. IE浮动 margin 产生的双倍距离
#box {
float:left;
width:100px;
margin:0 0 0 100px; //这种情况之下IE会产生200px的距离
display:inline; //使浮动忽略
}

5. padding 问题
FF设置 padding 后,div会增加 height 和 width,但IE不会 (* 标准的 XHTML1.0 定义 dtd 好像一致了)
高度控制恰当,或尝试使用 height:100%;
宽度减少使用 padding
但根据实际经验,一般FF和IE的 padding 不会有太大区别,div 的实际宽 = width + padding ,所以div写全 width 和 padding,width 用实际想要的宽减去 padding 定义

6. div嵌套时 y 轴上 padding 和 marign 的问题
FF里 y 轴上 子div 到 父div 的距离为 父padding + 子marign
IE里 y 轴上 子div 到 父div 的距离为 父padding 和 子marign 里大的一个
FF 里 y 轴上 父padding=0 且 border=0 时,子div 到 父div 的距离为0,子marign 作用到 父div 外面

7. padding,marign,height,width 的傻瓜式解决技巧
注意是技巧,不是方法:
写好标准头
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
高尽量用padding,慎用margin,height 尽量补上100%,父级height有定值子级height不用100%,子级全为浮动时底部补个空clear:both的div
宽尽量用 margin,慎用padding,width算准实际要的减去padding

列表类

1. ul 标签在FF中默认是有 padding 值的,而在IE中只有margin有值
先定义 ul {margin:0;padding:0;}

2. ul和ol列表缩进问题
消除ul、ol等 列表的缩进时,样式应写成: {list-style:none;margin:0px;padding:0px;}

显 示类

1. display:block,inline 两个元素
display:block; //可以为内嵌元素模拟为块元素
display:inline; //实现同一行排列的的效果
display:table; //for FF,模拟table的效果
display:block 块元素,元素的特点是:
总是在新行上开始;
高度,行高以及 顶和底边距都可控制;
宽度缺省是它的容器的100%,除非设定一个宽度
<div>,<p>,<h1>,<form>,<ul> 和 <li> 是块元素的例子
display:inline 就是将元素显示为行内元素,元素的特点是:
和其他元素都在一 行上;
高,行高及顶和底边距不可改变;
宽度就是它的文字或图片的宽度,不可改变。
<span>,<a>,<label>,<input>,<img>,<strong> 和 <em> 是 inline 元素的例子

2. 鼠标手指状显示
全部用标准 的写法 cursor: pointer;

背景、图片类

1. background 显示问题
全部注意补齐 width,height 属性

2. 背景透明问题
IE: filter: progid: DXImageTransform.Microsoft.Alpha(style=0,opacity=60);
IE: filter: alpha(opacity=10);
FF: opacity:0.6;
FF: -moz-opacity:0.10;
最好两个 都写,并将opacity属性放在下面

Javascript 相关文章推荐
Jquery网页出现的乱码问题的三种解决方法
Jun 30 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
Jul 09 Javascript
jQuery实现异步获取json数据的2种方式
Aug 29 Javascript
jQuery实现div拖拽效果实例分析
Feb 20 Javascript
Bootstrap Table使用整理(二)
Jun 09 Javascript
详解Vue 全局引入bass.scss 处理方案
Mar 26 Javascript
vue 监听屏幕高度的实例
Sep 05 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
Sep 28 Javascript
微信小程序实现张图片合成为一张并下载
Jul 16 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
Sep 12 Javascript
手把手15分钟搭一个企业级脚手架
Sep 16 Javascript
JavaScript 实现同时选取多个时间段的方法
Oct 17 Javascript
js 数值项目的格式化函数代码
May 14 #Javascript
IE8 中使用加速器(Activities)
May 14 #Javascript
jquery 日期分离成年月日的代码
May 14 #Javascript
JQuery 操作select标签实现代码
May 14 #Javascript
高性能web开发 如何加载JS,JS应该放在什么位置?
May 14 #Javascript
js 图片等比例缩放代码
May 13 #Javascript
跨浏览器开发经验总结(四) 怎么写入剪贴板
May 13 #Javascript
You might like
PHP导出Excel实例讲解
2016/01/24 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
各种常用的JS函数整理
2013/10/25 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
学习python的几条建议分享
2013/02/10 Python
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
使用python画个小猪佩奇的示例代码
2018/06/06 Python
python之super的使用小结
2018/08/13 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
Django之form组件自动校验数据实现
2020/01/14 Python
python3 logging日志封装实例
2020/04/08 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
2014年计算机专业个人自我评价
2014/01/19 职场文书
群众路线批评与自我批评
2014/02/06 职场文书
环境卫生倡议书
2014/08/29 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
入股协议书范本
2014/11/01 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
如何写好闭幕词
2019/04/02 职场文书
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android