ie 和firefox中javascript中的异同问题
2011-05-24 11:13
162 查看
注意的一些问题:
(一)尽量使用javascript/DOM标准
(二)标准有时也不能跨浏览器
1)要面对跨浏览器的时候经常会遇到一些ie特有的函数?
可以这样解决:
做一个判断把ie和firefox的javascript代码分开写
if (typeof window.ActiveXObject != 'undefined') { // 支持IE浏览器
//do some thing here
}
else if((typeof document.implementation != 'undefined')&&(typeof document.implementation.createDocument!='undefined')) { // 支持Firefox浏览器
//do some thing here
}
2)如果遇到 window.event时在函数中就要特别处理:
e.g.
页面中:
Java代码
< input type="button" value="test" onclick="javasctipt:testOnclick(event)" >
javasctipt中的代码
Java代码
function testOnclick(evt){
evt = evt ? evt : (window.event ? window.event : null);
}
Java代码
//获得点击对象的id
var elem = evt.srcElement ? evt.srcElement : evt.target;//这样可以事件的元素 相当于document.getelementById("xx")拿元素一样
idOfInputElement=elem.getAttribute("id");//如果有id属性的话就会拿到属性的值
3)关于Array的indexOf方法问题
Array是object对象,有些浏览器不支持idsArray.indexOf(..),这个方法也不是javascript标准,用循环可以拿到最正确的值
4)页面调用框架中的方法问题
比如有个 A.html,他包含了B.html; B.html有个 test()方法,有个button,按button就触发test方法
写法:<input type="button" value="test" onclick="top.B.test()"/>
如果用<input type="button" value="test" onclick="test()"/>在firefox上会不起作用
5)window.top.BB.document.getElementById("BFrame") 和window.top.BB.BFrame的不同 BB,BFrame是frame的name的value
window.top.frames["BB"].document.getElementById("BFrame")==window.top.BB.document.getElementById("BFrame") 结果是true,他们是同一对象
window.top.frames["BB"].document.getElementById("BFrame")==window.top.BB.BFrame 结果是 false,说明他们是不同的对象
window.top.BB.BFrame 是object window
window.top.frames["BB"].document.getElementById("BFrame")和window.top.BB.document.getElementById("BFrame")是objectHTMLFrameElement
他们在删除的时候也不一样,
object window拿到的是window对象,要删除两次才可以删掉,有时还会报错
objectHTMLFrameElement是页面中的frame元素,删一次就可以完全删除了,注意这样的删除只是指向了null,而objectHTMLFrameElement元素还是存在的
(三)初始化问题
在使用对象的时候,尽可能在使用前初始化,这样可以避免一些加载问题
(四)其他问题:
下面的代码用于屏蔽firefox鼠标右键
<script type="text/javascript">
document.oncontextmenu=function(e){return false;}
</script>
关于禁止选择:
在IE下,禁止用户选择内容,用脚本可以实现:
<script>
document.onselectstart = function(){return false;}
</script>
或
<body onselectstart="return false">
在firefox,这样子的写法没法实现相同的功能,不过可能用css实现:
在页面加上
<style>
html *{-moz-user-select: none;}
</style>
例子:
<style>
html *{-moz-user-select: none;}
</style>
<body>
试试看能否选择这些文字?
</body>
把 document.all["XX"] 改为 document.getElementById("XX");
(一)尽量使用javascript/DOM标准
(二)标准有时也不能跨浏览器
1)要面对跨浏览器的时候经常会遇到一些ie特有的函数?
可以这样解决:
做一个判断把ie和firefox的javascript代码分开写
if (typeof window.ActiveXObject != 'undefined') { // 支持IE浏览器
//do some thing here
}
else if((typeof document.implementation != 'undefined')&&(typeof document.implementation.createDocument!='undefined')) { // 支持Firefox浏览器
//do some thing here
}
2)如果遇到 window.event时在函数中就要特别处理:
e.g.
页面中:
Java代码
< input type="button" value="test" onclick="javasctipt:testOnclick(event)" >
javasctipt中的代码
Java代码
function testOnclick(evt){
evt = evt ? evt : (window.event ? window.event : null);
}
function testOnclick(evt){ evt = evt ? evt : (window.event ? window.event : null); }
Java代码
//获得点击对象的id
var elem = evt.srcElement ? evt.srcElement : evt.target;//这样可以事件的元素 相当于document.getelementById("xx")拿元素一样
idOfInputElement=elem.getAttribute("id");//如果有id属性的话就会拿到属性的值
//获得点击对象的id var elem = evt.srcElement ? evt.srcElement : evt.target;//这样可以事件的元素 相当于document.getelementById("xx")拿元素一样 idOfInputElement=elem.getAttribute("id");//如果有id属性的话就会拿到属性的值
3)关于Array的indexOf方法问题
Array是object对象,有些浏览器不支持idsArray.indexOf(..),这个方法也不是javascript标准,用循环可以拿到最正确的值
4)页面调用框架中的方法问题
比如有个 A.html,他包含了B.html; B.html有个 test()方法,有个button,按button就触发test方法
写法:<input type="button" value="test" onclick="top.B.test()"/>
如果用<input type="button" value="test" onclick="test()"/>在firefox上会不起作用
5)window.top.BB.document.getElementById("BFrame") 和window.top.BB.BFrame的不同 BB,BFrame是frame的name的value
window.top.frames["BB"].document.getElementById("BFrame")==window.top.BB.document.getElementById("BFrame") 结果是true,他们是同一对象
window.top.frames["BB"].document.getElementById("BFrame")==window.top.BB.BFrame 结果是 false,说明他们是不同的对象
window.top.BB.BFrame 是object window
window.top.frames["BB"].document.getElementById("BFrame")和window.top.BB.document.getElementById("BFrame")是objectHTMLFrameElement
他们在删除的时候也不一样,
object window拿到的是window对象,要删除两次才可以删掉,有时还会报错
objectHTMLFrameElement是页面中的frame元素,删一次就可以完全删除了,注意这样的删除只是指向了null,而objectHTMLFrameElement元素还是存在的
(三)初始化问题
在使用对象的时候,尽可能在使用前初始化,这样可以避免一些加载问题
(四)其他问题:
下面的代码用于屏蔽firefox鼠标右键
<script type="text/javascript">
document.oncontextmenu=function(e){return false;}
</script>
关于禁止选择:
在IE下,禁止用户选择内容,用脚本可以实现:
<script>
document.onselectstart = function(){return false;}
</script>
或
<body onselectstart="return false">
在firefox,这样子的写法没法实现相同的功能,不过可能用css实现:
在页面加上
<style>
html *{-moz-user-select: none;}
</style>
例子:
<style>
html *{-moz-user-select: none;}
</style>
<body>
试试看能否选择这些文字?
</body>
把 document.all["XX"] 改为 document.getElementById("XX");
相关文章推荐
- IE和firefox 兼容问题及javascript应用代码 (搜集)
- JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
- Javascript 中的常见问题 IE 和 FIREFOX在解析CSS方面的区别
- IE与Firefox的几个javascript兼容问题及解决
- JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
- Javascript的IE和Firefox兼容性问题
- [转载]Javascript的IE和Firefox兼容性问题集合
- JavaScript的常见兼容问题及相关解决办法chrome IE firefox
- Javascript在IE和Firefox浏览器常见兼容性问题总结
- JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结 【转】http://blog.csdn.net/uniqer/article/details/7789104
- IE和FireFox中JavaScript的函数名的作用域的异同
- 一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
- JavaScript在IE和Firefox下的兼容性问题
- javascript和css在ie和firefox中关于兼容性问题的解决办法
- javascript在IE和Firefox中兼容性问题
- 一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
- IE与FireFox的JavaScript兼容问题
- JavaScript在IE和Firefox下的兼容性问题
- insertRow() firefox和IE下的兼容问题 览器JavaScript时要注意的问题
- JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结