javascript 兼容写法(FF&IE)

IE、FF的JS兼容写法 NULL 博文链接:https://gaojianqi6.iteye.com/blog/1202178 立即下载
兼容firefox和ie的javascript的一些写法
最近我想让我们的CMS能在firefox中使用,于是以前所写的javascript代码就都需要考虑兼容问题了,无端增加了好多工作量。
下面是兼容firefox和ie时需要注意的一些写法
一,事件处理
在ie中处理事件直接使用window.event对象即可,但在firefox中,是没有 window.event对象的,函数需要使用事件的时候,需要在事件发生时把事件作为参数传递给函数,不象在ie中,事件对象是全局的,随处都可以访问。下面这个getEvent()函数可以兼容firefox和ie,只需要在访问事件对象的函数的开始调用getEvent()即可,不用再把事件作为参数传递。
function myfunc()
{
      var evt=getEvent();
      var element=evt.srcElement || evt.target;
}


function getEvent()
{
if(document.all)     return window.event;//如果是ie
func=getEvent.caller;
         while(func!=null){
             var arg0=func.arguments[0];
             if(arg0){if((arg0.constructor==Event || arg0.constructor ==MouseEvent) || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation)){return arg0;}             }
             func=func.caller;
         }
        return null;
}
在firefox和ie中event对象还是有些差别的,比如ie中event.srcElement,在firefox中就是event.target,具体可参考:
http://www.javascriptkit.com/domref/domevent.shtml
二,访问frame或iframe对象
在ie中可以通过frame的id或name来访问,但在firefox中只能用frame的name来访问.
三,自定义属性
在ie中自定义属性可以直接访问,但在firefox中需要使用getAttribute()
比如
<td id="name" tel="1234"></td>
ie中:alert(name.tel);
firefox中:alert(name.getAttribute("tel"));
四,innerText和textContent
ie中的innerText在firefox中对应的是textContent
例如
if(document.all){
      document.getElementById('element').innerText = "my text";
} else{
     document.getElementById('element').textContent = "my text";
}
其他参考
http://developer.mozilla.org/en/docs/Gecko_DOM_Reference
http://www.javascriptkit.com/javatutors/dom.shtml
http://www-128.ibm.com/developerworks/web/library/wa-ie2mozgd/
http://www.firefox.net.cn/newforum/viewtopic.php?t=17017
FireFox中的DOM参考手册:http://www.mozilla.org/docs/dom/domref/dom_shortTOC.html
IE中的DOM参考手册:http://msdn.microsoft.com/workshop/author/dhtml/reference/dhtml_reference_entry.asp?frame=true
javascript在IE和Firefox中的兼容考虑
2007-09-06 10:38
1.document.formName.item("itemName") 问题


说明:IE下,可以使用document.formName.item("itemName")或document.formName.elements ["elementName"];Firefox下,只能使用document.formName.elements["elementName"]. 
解决方法:统一使用document.formName.elements["elementName"].




2.集合类对象问题


说明:IE下,可以使用()或[]获取集合类对象;Firefox下,只能使用[]获取集合类对象. 
解决方法:统一使用[]获取集合类对象.
例如:document.getElementsByName("inputName")[0]、document.forms["formName"] 




3.自定义属性问题


说明:IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;Firefox下,只能使用getAttribute()获取自定义属性. 
解决方法:统一通过getAttribute()获取自定义属性. 




4.eval("idName")问题


说明:IE下,可以使用eval("idName")或getElementById("idName")来取得id为idName的HTML对象;Firefox下只能使用getElementById("idName")来取得id为idName的HTML对象. 
解决方法:统一用getElementById("idName")来取得id为idName的HTML对象. 
例如:document.getElementById("itemId") 




5.变量名与某HTML对象ID相同的问题


说明:IE下,HTML对象的ID可以作为document的下属对象变量名直接使用;Firefox下则不能.Firefox下,可以使用与HTML对象ID相同的变量名;IE下则不能。
解决方法:使用document.getElementById("idName")代替document.idName.最好不要取HTML对象ID相同的变量名,以减少错误;在声明变量时,一律加上var,以避免歧义. 




6.const问题


说明:Firefox下,可以使用const关键字或var关键字来定义常量;IE下,只能使用var关键字来定义常量. 
解决方法:统一使用var关键字来定义常量. 




7.input.type属性问题


说明:IE下input.type属性为只读;但是Firefox下input.type属性为读写.




8.window.event问题


说明:window.event只能在IE下运行,而不能在Firefox下运行,这是因为Firefox的event只能在事件发生的现场使用. 
解决方法: 在触发事件的函数上使用(aEvent)参数,例如下面的
objNode.onmouseover=function(aEvent){
     var myEvent = window.event ? window.event.srcElement : aEvent.target;
     //执行其他动作
}




9.event.x与event.y问题


说明:IE下,even对象有x,y属性,但是没有pageX,pageY属性;Firefox下,even对象有pageX,pageY属性,但是没有x,y属性. 
解决方法:使用mX(mX = event.x ? event.x : event.pageX;)来代替IE下的event.x或者Firefox下的event.pageX.




10.event.srcElement问题


说明:IE下,even对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性. 
解决方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)来代替IE下的event.srcElement或者Firefox下的event.target. 




11.window.location.href问题


说明:IE或者Firefox2.0.x下,可以使用window.location或window.location.href;Firefox1.5.x下,只能使用window.location. 
解决方法:使用window.location来代替window.location.href.




12.模态和非模态窗口问题


说明:IE下,可以通过showModalDialog和showModelessDialog打开模态和非模态窗口;Firefox下则不能. 
解决方法:直接使用window.open(pageURL,name,parameters)方式打开新窗口。


如果需要将子窗口中的参数传递回父窗口,可以在子窗口中使用window.opener来访问父窗口. 例如:var parWin = window.opener; parWin.document.getElementById("itemID").value = "some value"; 




13.frame问题


以下面的frame为例:<frame src="xxx.html" id="frameId" name="frameName" />


(1)访问frame对象:
IE:使用window.frameId或者window.frameName来访问这个frame对象.
Firefox:只能使用window.frameName来访问这个frame对象.
另外,在IE和Firefox中都可以使用window.document.getElementById("frameId")来访问这个frame对象.


(2)切换frame内容:
在IE和Firefox中都可以使用window.document.getElementById("testFrame").src = "xxx.html"或window.frameName.location = "xxx.html"来切换frame的内容.


如果需要将frame中的参数传回父窗口,可以在frme中使用parent来访问父窗口。例如:parent.document.form1.filename.value="some value";




14.body问题


Firefox的body在body标签没有被浏览器完全读入之前就存在;而IE的body则必须在body标签被浏览器完全读入之后才存在.


例如: 
Firefox: 
程序代码
<body> 
<script type="text/javascript"> 
document.body.onclick = function(evt){ 
evt = evt || window.event; 
alert(evt); 
} 
</script> 
</body>


IE&Firefox: 
程序代码
<body>
</body> 
<script type="text/javascript"> 
document.body.onclick = function(evt){ 
evt = evt || window.event; 
alert(evt); 
} 
</script>






15. nodeName 和 tagName 问题


问题:在MF,IE中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值。
解决方法:使用 tagName,但应检测其是否为undefined。


16. url encoding


问题:js中如果书写url就直接写&不要写&例如var url = 'xx.jsp?objectName=xx&objectEvent=xxx';
frm.action = url那么很有可能url不会被正常显示以至于参数没有正确的传到服务器,一般会服务器报错参数没有找到;当然如果是在tpl中例外,因为tpl中符合xml规范,要求&书写为&
一般MF无法识别js中的&


17.children 与 childNodes,removeNode


问题一:在MF中没有   parentElement parement.children   而用 parentNode parentNode.childNodes
问题二:childNodes的下标的含义在IE和MF中不同,MF使用DOM规范,childNodes中会插入空白文本节点。
问题三:一般可以通过node.getElementsByTagName()来回避这个问题。当html中节点缺失时,IE和MF对parentNode的解释不同,例如
    <form>
    <table>
         <input/>
    </table>
    </form>
MF中input.parentNode的值为form, 而IE中input.parentNode的值为空节点
如何搭建一个vue项目(完整步骤) 查看版本的两种方式 出现版本号则说明安装成功(最新的以官网为准) 这里注意:安装vue-cli对node.js的版本是有要求的 装的两种方式:输入cmd命令 查看安装的版本(显示版本号说明安装成功) 如果你原来有版本或者版本比较低,可以升级... 阅读详情

相关推荐

Qt5+OSG实战:如何用osgQOpenGLWidget在窗口中加载3D模型(附完整代码)

本文详细解析了如何在Qt5中使用osgQOpenGLWidget加载和渲染3D模型,涵盖环境配置、核心架构、性能优化及高级技巧。通过实战案例和完整代码,帮助开发者实现工业级3D模型渲染,提升Qt与OSG的整合效率。

weixin_42741930的博客 263

多浏览器兼容性问题及解决方案之Javascript篇

 时间: 2009-9-02 - 分类: Html+CSS, JavaScript - 评论: 0 - 阅读: 70 次 CSS跟JavaScript开发中,最令大家头疼的问题就是浏览器兼容性了,虽然很多文章有这方面的文章,但依然让很多开发人员晕头转向,而且也不够全面。这篇文章,将全面收集css和javascript在各种浏览器下的兼容性报告,也期待各位不断补充。由于发觉内容收集越

张峰的专栏 1211

Windows Server远程桌面断开后,PyWinAuto/按键精灵脚本失效?试试这个‘会话保持’的终极配置

本文深入解析Windows Server远程桌面断开后导致PyWinAuto/按键精灵脚本失效的问题,提供会话保持的终极配置方案。通过转换到控制台会话(console模式)和调整组策略,确保自动化程序在断开连接后持续稳定运行,适用于Windows Server各版本。

weixin_28738165的博客 227

记录ie不支持 for of 解决办法

chrome可以正常关闭,ie关闭报错 关闭tags页签报错 源代码: for (const [i, v] of arrayList.entries()) { if (v.val === view.val) { listArray.splice(i, 1) break } } ie报错展示 一段时间的百度搜索,ie 不支持for of ,因此改为for 遍历数组,成功解决问题 for (let i=0;i<listArray.le

lyx1838102537的博客 957

PCB设计中的规则优先级陷阱:为什么你的过孔总是十字连接?

本文深入解析PCB设计中Altium Designer规则优先级机制,解决过孔总是十字连接而非全连接的问题。通过分析铺铜连接原理和规则匹配逻辑,提供精确控制连接方式的技术实践,包括Custom Query使用和优先级最佳设置,帮助设计师避免常见陷阱,优化高速电路板的电气性能和制造可靠性。

banana的博客 467

[统计模型] 基于R的潜在剖面分析(LPA)

本文主要介绍基于R进行潜在剖面分析(Latent Profile Aanalysis, LPA)。 关于潜在类别分析LCA/潜在剖面分析LPA的概念和区别,可以参考一下这篇文章: 潜在类别分析LCA \潜在剖面分析LPA介绍https://www.jianshu.com/p/4c830094131e?utm_campaign=maleskine 但是此文对潜类别分析的阐释还比较生涩,而且没有具体的代码编写、模型优选等内容。本文旨在丰富LPA的内容,并希望和大家交流、共同进步。 1. 什么是潜类别分.

bigstar863的博客 1万+

IE浏览器兼容方法+几种网页布局

笔记来源:拉勾教育 - 大前端就业集训营 文章内容:学习过程中的笔记、感悟、经验 一、IE浏览器兼容 1、html 兼容写法 html 中可以使用条件注释的方法, 对 IE 进行特殊处理。 条件注释通过注释演变而来: 普通的浏览器认为内部内容为注释, 不进行加载,而指定的浏览器会正常加载代码内容。 <!--[if lte IE 9]> <h2>小于等于IE9的浏览器可以看到</h2> <![endif]--> 注: 书写时, 两个标签前面都要加!,

qq_43477251的博客 1180

【毕业设计】基于雷达与深度学习的摔倒检测——雷达数据集处理

雷达原始数据是时域非平稳信号,快速傅里叶变换(Fast Fourier Transformation, FFT)不能很好地提取微多普勒效应的模式特征。因此短时傅里叶变换(Short Time Fourier Transformation, STFT)被应用于雷达信号的时频谱分析。本文主要介绍雷达数据集的预处理过程,包括时频谱图的中值滤波与 SVD 分解。

洋洋Young的博客 1808

兼容 FF&IE 的替换鼠标选择文字方法(转载)

<script type="text/javascript"> function changes(obj){ var TextIn=document.getElementById("textin"); if(TextIn.createTextRange){ //ie兼容 TextIn.focus(); document.selection.createRa...

weixin_30314793的博客 90

[AI] 嵌入模型选择:bge / text-embedding-3 / Jina Embeddings 对比与选型指南

摘要: 本文对比了BGE-M3、OpenAI和Jina三种主流嵌入模型在语言覆盖、性能、延迟、维度和成本等维度的差异。BGE-M3适合中文场景,本地部署成本低;OpenAI API多语能力强但依赖网络;Jina在多语表现突出但需关注商用许可。测试显示BGE-M3本地延迟3-6ms,OpenAI API延迟200-600ms。选型建议:隐私场景选BGE本地部署,多语低维护选OpenAI,高精度选Jina。部署时需注意批处理优化、向量库压缩和商用许可等问题,建议建立评测指标并监控关键指标。

每日出拳老爷子的博客 428

18、深入解析航空飞行数据中的秘密:从数据清理到高级分析

本文详细解析了如何使用R语言处理和分析航空飞行数据,从基础的数据清理到复杂的回归分析和机器学习模型构建。文章涵盖了探索性数据分析、天气数据的整合、地理信息可视化、时间序列预测以及航班延误的优化策略等内容,展示了如何通过数据挖掘技术提高航空运营效率和乘客满意度,并探讨了数据质量评估与隐私保护的重要性。

convnet3designer的博客 106

浏览器兼容性部分---FF&IE678

参考博文 http://blog.sina.com.cn/s/blog_6fe8363f0100mq26.html --例句 <script>function test(event) {varevent = event || window.event;//do Something}</script> 转载于:https://www.cnblogs.c...

weixin_30711917的博客 78

强化学习(Reinforcement Learning)与动态系统控制方法

一个具体的 RBC 的例子是自动驾驶汽车中的交通规则。在训练过程中,代理通过与环境交互获取奖励信号,并学习如何在某个状态下采取最佳的行动,以最大化长期的累积奖励。在化工过程中,通过对生产过程中的温度、压力、流量等参数的控制来实现产品的质量和产量的提高。需要注意的是,以上代码只是一个简单的示例,实际的 MPC 系统可能会更加复杂,并包含更多的模型预测和控制算法来实现更复杂的控制任务。需要注意的是,以上代码只是一个简单的示例,实际的自动驾驶汽车系统可能会更加复杂,并包含更多的规则和条件来确保安全行驶。

AI天才研究院 4062

如何获得鼠标位置单击后的屏幕位置(FF&IE)?

functionabsolutePoint(element){ varresult={x:element.offsetLeft,y:element.offsetTop}; element=element.offsetParent; while(element){ result.x+=element.offsetLeft...

weixin_30621711的博客 78

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IE和火狐的一些区别------解决兼容问题

最好都是能使用w3c的标准l来进行代码编写 &lt;!-- 这是ie方法 --&gt; 这是ie 和ff 页面加载完后执行的事件 innerText在ff里没有这个属性,对应的属性是textContent 下面是判断是否是IE if(navigator.appName.indexOf("Explorer") &gt; -1) document.getElementById("xx")...

iteye_3191的博客 81

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

js在IE和火狐下的一些区别

<br />最好都是能使用w3c的标准l来进行代码编写<br /><!-- 这是ie方法 --><br /><script defer type="text/javascript"><br />    subDate();<br /></script><br /><script type="text/javascript"><br />    // 这是ff方法<br />    if (document.addEventListener)<br />        document.addEventLis

朩冰雲的专栏 1541

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jquery ajax.set,jQuery的AJAX响应集合cookie头(jQuery AJAX Response Set Co

我有使用AA REST API的项目。 在这里,当Isend的登录请求,他们送我方含一些数据的响应作为JSON。 随着在响应头Access-Control-Allow-Origin:*Connection:keep-aliveContent-Length:239Content-Type:application/jsonDate:Fri, 19 Oct 2012 06:28:12 GMTServ...

weixin_39604280的博客 732

js for in 在各浏览器差异

js for in 在各浏览器差异 var obj = {  2   2:"2",  3   40:"40",  4   15:"15",  5 };  6 for (var k in obj) {  7     console.log(k);   8 };   ie6/7/8/firefox/safari 2 40 15 ie9/chrome10/opera11 2

程序员写的技术 FAQ 和杂文 4393

angular4 如何让IE浏览器正常工作,提示_for-of.js错误

进行angulajs4踩坑阶段,遇到ie浏览器打开页面什么也没有显示。ie11 都没有显示,控制台报_for-of.js错误。。 第一步 找到项目 src 目录下 polyfill.ts 文件,将注释部分,取消注释 . 第二步 打开注释后的代码 ...

qq_34648151的博客 738

ie11 一个非常严重的兼容问题 for of 不支持

需要改成: for(let i=0;i<this.showImgs.length;i++) { let iii=this.showImgs[i]; }

QQ2856639881的专栏 2732

简述js中 for in 与 for of 区别

for in是ES5标准,遍历key. for of是ES6标准,遍历value.for (var key in arr){ console.log(arr[key]); }for (var value of arr){ console.log(value); }

ForMyQianDuan的博客 1万+

for ie无效 in js_javascript总for of和for in的区别?

先说结论:推荐在循环对象属性的时候,使用for...in,在遍历数组的时候的时候使用for...of。for...in循环出的是key,for...of循环出的是value注意,for...of是ES6新引入的特性。修复了ES5引入的for...in的不足for...of不能循环普通的对象,需要通过和Object.keys()搭配使用假设我们要遍历一个数组的valuelet aArray = ['...

weixin_29865183的博客 281

for( in ) IE下兼容问题

在JS 中 for in 常用于遍历对象的可枚举属性,包括原型链上的属性。然而for_in在IE < 9下可能会出现问题。   for_in要出现问题必须满足两个条件:   1:IE < 9;   2:某些不可枚举的属性被重写。   在js中当一些不可枚举的属性比如toString被重写后,它会变成可枚举。然而当你碰上了IE<9,这些被重写的属性依旧是...

639

一行代码轻松搞定各种IE兼容问题,IE6,IE7,IE8,IE9,IE10

在网站开发中不免因为各种兼容问题苦恼,针对兼容问题,其实IE给出了解决方案Google也给出了解决方案百度也应用了这种方案去解决IE的兼容问题? 百度源代码如下: 1 2 html xmlns=http://www.w3.org/1999/xhtml xmlns:bd=http://www.baidu.com/2010/xbdml> 3 head> 4 m

小诺 7万+

js中for in与for of之间的差异

先说结论: 推荐在循环对象属性的时候,使用for…in,在遍历数组的时候的时候使用for…of。 for…in循环出的是key,for…of循环出的是value 注意,for…of是ES6新引入的特性。修复了ES5引入的for…in的不足 for…of不能循环普通的对象,需要通过和Object.keys()搭配使用 假设我们要遍历一个数组的valuelet aArray = [‘a’,1...

u013594477的专栏 5662
上一篇: javascript创建对象的几种方式
下一篇: 谈谈CSS浏览器的兼容问题。集锦
jiestyle21
博客等级 码龄17年 36粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值