写了一个多月JS,感觉如今可不比几年前只有IE6的年代,而且过去只是用JS写个Ajax或者是简单的表单验证,可如今写一个稍微复杂点的小应用,要兼容所有浏览器,才发现真是太难了,难怪FE是一个独立的工种,有别于我们这些Java工程师了。
1 首先是最简单的select标签,就有诸多不兼容:
A、 cloneNode方法,对于非IE浏览器没有问题,对于IE浏览器,我遇到的问题包括:
1)option selected的会clone不过去,然后会将第一个option作为selected值
2)事件clone也会有问题
B、Readonly:对于IE6,可以通过以下方法将select设为readonly:
obj.onbeforeactive=function(){return false}
obj.onfocus=function(){obj.blur();}
obj.onmouseover=function(){obj.setCapture();}
obj.onmouseout=function(){obj.releaseCapture();}
对于其他浏览器,我采用的是元素替代法,动态创建一个input标签,把值赋给它,然后将select隐藏。
C、select的z-index对于IE6无效,网上有很多关于这个讨论,JQuery采用一个iframe搞定
D、动态添加option的方法不同,这个网上一搜一大堆
E、对于onclick和onchange的响应不同,在FF下可以在onclick select时动态读取option值然后构建option,然后选中一个值后执行onchange事件,但是IE下不能这样做。
2 css对offsetWidth之类的理解不同
http://newleague.iteye.com/blog/765535
3 对于vertical-align baseline的理解不同:
http://w3help.org/zh-cn/causes/RD1016
4 设置背景色
element.style.backgroundColor
在firefox下想改变颜色,必须先设为null,再设为其他颜色才行,即先取消原来的颜色。
在IE下,想取消颜色,必须设为''才行,而换其他颜色,无需先去掉之前的颜色。
5 不同浏览器去padding的理解不同
6 不同浏览器对强制换行和强制不换行的理解不同:
http://www.cftea.com/c/2009/01/QPDZU40MNW8FYYG3.asp
最恶心的是对于IE6,如果是<td><span>我是蚊子</span></td>,那么在td上写了word-break:keep-all依然无效,必须在span上也写。
7 获得head节点的方式不同
在Firefox下可以用window.head,而所有浏览器都兼容的方式是document.getElementsByTagName('head')[0]
8 往head上添加css code的方法不同,也就是动态添加<style>标签。
IE下可以用var style=document.createStyleSheet();style.cssText=cssCode;
而有文章说,在Windows上的IE,用createStyleSheet返回的是styleElement的styleSheet,而在Mac上返回的是styleElement自己。
在其他浏览器下需要document.createElement('style');
然后还有区分是否具有styleSheet属性。
这个很容易搜到。
9 对于onchange事件,firefox浏览器可以注册在table,div等组件上,然后通过冒泡,拦截input,select等发出的事件,而IE不行,必须绑定到相应的组件上
10 将input设为readonly=true,其依然会响应keypress,keyup,keydown,onblur事件
11 IE和非IE对于停止冒泡和取消默认行为的方法不同
12 大家都知道IE和非IE在动态添加事件时使用的方法不同,IE是attachEvent,其他是addListener,然后参数也不同。更重要的是如果一个控件绑定了多个function,他们绑定和执行的顺序是不同的,IE是跟绑定顺序相反,其他是跟绑定顺序相同
13 获得当前事件不同,一个是window.event一个是直接接受event
14 FF下执行offset系列非常慢,但是IE下比较快,而IE的改变CSS的执行非常慢。
Firefox6比Firefox3.6速度快的多,相差好几百倍(针对一个400行*50列的表格的JS处理)
15 如果大量动态改变css,那么使用document.createDocumentFragment,然后将需要修改样式的Dom获取出来appendChild到这个临时的fragment上,修改完css后再append回去即可,这样性能能差好几百倍。
16 浏览器加载网页时,顺序读取html,遇到外部js链接会读进来,然后按顺序执行,边解释边执行,而对于外部css,图片等则是启动另外的线程连接服务器去获取。
IE对于CSS引入有限制,我没试过,但有篇文章讨论:http://blog.csdn.net/ydshang/article/details/4158211
17 表格定位某一行,可以通过改变scrollTop来实现,当然如果出现了滚动条的话
18 IE的Dom用完要记得释放,可以在unload方法中,否则会出现内存泄露
19 unload方法在各个浏览器里各不相同,我之前的文章里有介绍。http://sslaowan.iteye.com/blog/1128209
20 我知道了为什么FE最喜欢的浏览器是FF,最讨厌的是IE6,恨不得IE6去死,其他IE也不怎么样。但是Chrome,Opera也各有各的bug
21 Ajax当使用同步模式时,如果访问的链接是错误的,那么FF会在控制台报错,而IE会直接弹出个对话框,然后就崩溃了。
22 FF支持document.getElementsByClass等方法,IE不支持,可以自己写一个。
23 trim方法在IE和FF下不同,需要自己写一个,可以用正则表达式
24 动态设置元素的css class在IE和非IE浏览器下也不同
25 有时本地字体库会影响你的字体,大小等显示,但是有时甚至会影响你的布局
26 字符串也可以使用><等符号比较大小,但是是字符串比较,不要被骗了。
27 JS中this问题非常让人困惑
28 判断浏览器可以有很多方法,主流是两大类,agent判断法和特性法,后者好像更推荐
29 JS是面向对象语言,对象.属性=值 只影响当前对象,而对象.prototype.属性则影响整个类。非IE浏览器可以覆盖DOM对象的类方法,但是IE不行。
至于用不用var的区别,undefined和null的区别,Ajax构建的不同方式,这些一般的Java程序员都了解了。
很多Java程序员也会使用JS框架,比如JQuery,Extjs和Dojo,她们都帮我们屏蔽了很多兼容性问题。
Dojo提供了Java一样的面向对象机制。
抛砖引玉,你还遇到过什么陷阱,那些FE都知道,而我们Java工程师不知道?
分享到:
相关推荐
【标题】"haizhilin-fe-interview-master_java_" 暗示了这是一个关于前端面试的项目,其中可能包含了与Java编程语言相关的面试题目或代码示例。在前端面试中,Java虽然不是主要的开发语言,但因其在服务器端的强大...
Free Spire.Barcode for Java 是一款基于 Java 语言开发的,免费的专门对条形码进行操作的类库。适用于商业或个人用途。这款产品的主要功能在于帮助开发人员轻松快捷高效地生成、读取和扫描一维条码和二维条码。 ...
【标题】:FE助手与Restlet Client:提升前端开发者效率的利器 【描述】:在IT行业中,前端开发者经常需要调试API接口、测试HTTP请求,以及进行网页开发。"FE助手"和"Restlet Client"就是针对这些需求设计的两款...
Free Spire.Presentation for Java 是一个专业的PowerPoint API,它允许开发人员在Java应用程序中创建、读取、写入、转换和保存PowerPoint文档。作为一款独立的Java组件,Free Spire.Presentation for Java的运行...
java连接mysql数据库的驱动,里边包含两个版本:5.1.47、8.0.28 也可从以下两个地址免费下载: 1. https://repo1.maven.org/maven2/mysql/mysql-connector-java/ 2. ...
总的来说,这个FE2.1 USB HUB的资料包是全面了解和实施USB HUB设计的重要资源,它提供了从理论到实践的全部信息,对于电子工程师和爱好者来说,是不可多得的学习材料。通过深入学习和实践,你可以掌握USB HUB的设计...
这很可能是指美国国家工程师考试委员会(NCEES)发布的针对电子和计算机工程师的“基础工程师考试”(FE Exam)参考手册。FE考试是成为专业工程师(PE)所必须通过的第一个步骤,它是一个计算机化考试。 2. 标签...
它还提供了3个电压输入口——5V、3V和1.8V,每个接口只需添加10uF电容,不需要大容量如100uF的电容,且实验证明即使不添加小电容也能正常工作,这再次强调了其优化的电源管理。 在功能特性方面,FE2.1芯片在所有...
冰蓝科技的Spire.Pdf-FE_4.4.1.zip压缩包工具正是为此目的而生,它提供了一个强大的Java库,使得开发者能够轻松实现PDF与其他文件格式的互转。 首先,我们来深入了解Spire.Pdf的核心功能。这是一款针对Java平台的...
USB HUB FE1.1是一种高度...通过其丰富的特性集,包括但不限于支持多种USB传输速率、低功耗设计、全面的测试功能和高度集成的组件,FE1.1在USB扩展硬件中占据了重要地位,为用户提供了一个可靠的多端口USB解决方案。
这种速度级别的USB接口适用于那些对数据传输速率要求不高的设备,如鼠标、键盘、游戏控制器等。 **数据手册主要内容** 1. **协议规格**:数据手册详细介绍了FE1.1s的协议栈,包括物理层(Physical Layer)、数据链...
FE1.1s芯片是专门用于USB 2.0四端口集线器的控制器芯片,其设计高度集成、性能优越、功耗低,且具有高性价比。该芯片全面符合USB 2.0规范版本2.0,支持高速模式(480MHz)和全速模式(12MHz),提供了单个交易翻译器...
FE1.1S能监控并管理电源供给,确保不超过规定的电流限制。 4. 错误检测与恢复:在数据传输过程中,FE1.1S会检测错误并尝试恢复,例如CRC校验错误、超时等,以提高系统的稳定性。 5. 多设备支持:USB扩展口通常可以...
本设计分享的是DIY制作FE2.1模块USB 2.0 HUB集线器设计,附原理图/PCB/BOM。该USB 2.0 HUB集线器采用FE2.1模块为主控芯片,支持7个USB Port,具备高性能、低功耗、低成本的特点。
"FE2.1 7Ports HUB PCB和原理图"是一个专门针对具有七个USB端口集线器的设计资料,对于工程师而言,这是一个非常有价值的参考资源。 FE2.1 PCB设计是指一个特定版本的电路板设计,其中"FE"可能代表了产品系列或功能...
USB HUB 芯片 FE2.1 数据手册 本文档是关于 USB HUB 芯片 FE2.1 的数据手册,详细介绍了该芯片的特性、架构和功能。 概述 FE2.1 是一种高度集成、高速、低功耗的 USB 2.0 高速 7 端口集线器控制器芯片。它采用多...
"METTLER TOLEDO FE38 电导率仪标准操作规程.pdf" 以下是从给定的文件中生成的相关知识点: 1. METTLER TOLEDO FE38 电导率仪的基本结构和工作原理:METTLER TOLEDO FE38 电导率仪是一种电导率仪器,用于测量电导...
### 美国工程师考试参考...它不仅帮助考生为FE考试做好准备,同时也为那些希望深入了解工程学科基础知识的人提供了宝贵的学习资料。通过仔细研究这份手册,考生可以更好地准备考试,并为未来的职业生涯打下坚实的基础。
总结,了解《FE1.1s USB2.0 Hub 使用手册及参考电路》的内容,无论是对于普通用户还是电子工程师,都有重要的实践意义。通过正确的使用和理解参考电路,我们可以更好地利用这一设备,优化我们的数字生活和工作环境。
在Java编程中,处理文本文件时,我们可能会遇到BOM(Byte Order Mark)头信息的问题。BOM是Unicode编码格式中的一个特殊字符,用于标识文件的编码类型,常见于UTF-8、UTF-16和UTF-32等格式。在某些情况下,如读取或...