各种浏览器兼容问题

关于用脚本设置onload事件句柄

document.body.onload=function(){alert("!")}

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

在IE、Opera均正常有效,唯独FF既不执行,也不报错,因为在FF,document.body.onload是undefined(未定义),把一个函数赋值给undefined既不会发生什么事情,也不算出错。
这么写的在IE、Opera和FF都有效:

window.onload=function(){alert("!")}

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

关于用脚本绑定事件句柄
IE 下用 attachEvent, FF 下用 addEventListener

相关讨论如下:
http://search.blueidea.com/?q=addEventListener&bisearch=bbs
(基本上看几贴就明白了,我就不详细说了。请大家看的时候不要顶老贴,谢谢)

参考链接:
http://bbs.blueidea.com/viewthre ... p;page=1#pid2248824
http://bbs.blueidea.com/viewthread.php?tid=2507914
关于浮动代码和 documentElement / body
常常有人提问,为什么 漂浮广告 / 对联代码 在 xHTML 1.1 DTD 文件头 / FF 下不能使用
这是因为,按照标准来说,我们看到的窗体的滚动条不应该是 body 的,而是 HTML 的(也就是 document.documentElement 对象)
所以,解决办法是,把以前不标准的代码中, document.body.scrollTop 或者类似的代码变换为 document.documentElement.scrollTop
关于 ID 与 html 对象元素的引用
这个问题的原因非常非常多。但是一个基本的前提条件就是,对于IE 来说,一个HTML 元素的 ID 可以直接在脚本中当作变量名来使用,而 FF 中不可以。


代码如下:

<input id="t1"><input type="button" value="click me" onclick="alert(t1.value)">

代码如下:

<input id="t1"><input type="button" value="click me" onclick="alert(document.getElementById('t1').value)">

关于 事件对象的使用差异
IE 中,事件激发的时候,有一个全局的 window.event 对象保存了事件的相关信息
IE Only

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

FF 中,事件激发的时候,将一个局部的 event 对象作为第一个参数传递给了事件处理函数
FF Only

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

此外,IE 的 event 对象和 FF 的 event 对象还稍有不同。
以下是我常用的兼容形式

function doEvent(e){
var e=window.event?window.event:e;
var srcEle=e.srcElement?e.srcElement:e.target;
alert(srcEle.value);
}

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

参考
http://bbs.blueidea.com/thread-2667939-1-1.html

(0)

相关推荐

  • showModalDialog模态对话框的使用详解以及浏览器兼容

    1.ModalDialog是什么?showModalDialog是jswindow对象的一个方法,和window.open一样都是打开一个新的页面.区别是:showModalDialog打开子窗口后,父窗口就不能获取焦点了(也就是无法操作了).可以在子窗口中通过设置window.returnValue的值,让父窗口可以获取这个returnvalue. 2.一个例子1)主窗口main.html,2)在主窗口中通过showModalDialog的方式打开子窗口sub.html3)在子窗口中设置ret

  • 浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题

    如果你想使一个元素在全屏模式下展现 (比如说 <video>),你可以调用该元素的 requestFullscreen() 方法:这个方法在 Gecko 中的实现是 element.mozRequestFullScreen(),在 WebKit 中为 element.webkitRequestFullscreen(). 比如一个实例: var elem = document.getElementById("myvideo"); if (elem.requestFullscr

  • Javascript字符串浏览器兼容问题分析

    本文实例分析了Javascript字符串浏览器兼容问题.分享给大家供大家参考.具体分析如下: 先看下不兼容的写法,若我想获取某个字符串的第几位 复制代码 代码如下: var str='aavvvcc'; console.info(str[0]); 这种写法 在IE 7以下的浏览器都不兼容,以下提供浏览器全兼容的方式 复制代码 代码如下: var str='aavvvcc'; console.info(str.charAt(1)); 使用charAt() 就可以获取字符串中某个字符,并且全部兼容.

  • JavaScript初学者建议:不要去管浏览器兼容

    如果可以回到过去的话,我会告诉自己这句话:"初学JavaScript的时候无视DOM和BOM的兼容性" 我初学时的处境 在我初学JavaScript的时候最头痛的就是浏览器兼容问题.在Firefox下面好好的代码放到IE就不能显示了,又或者是在IE能正常显示的代码在firefox又报错了. 前端开发工程师的职责就包括跨浏览器开发.所以我就在还不了解JS这门语言本身的时候去花时间学习浏览器兼容知识,这样会让JS学习难度增加.但是不能兼容主流浏览器的代码不能用在实际项目中. DOM和BOM

  • 浅谈js中startsWith 函数不能在任何浏览器兼容的问题

    在做js测试的时候用到了startsWith函数,但是他并不是每个浏览器都有的,所以我们一般要重写一下这个函数,具体的用法可以稍微总结一下 在有些浏览器中他是undefined 所以我们可以这样的处理一下. if (typeof String.prototype.startsWith != 'function') { String.prototype.startsWith = function (prefix){ return this.slice(0, prefix.length) === p

  • 浏览器兼容的JS写法总结

    一.元素查找问题 1. document.all[name]   (1)现有问题:Firefox不支持document.all[name]   (2)解决方法:使用getElementsByName(name),getElementById(id)等来替代. 2. 集合类对象问题   (1)现有问题:IE中对许多集合类对象取用时可以用 (),但在Firefox只能用[].       如:IE中可以使用document.forms("formName")来返回名字为"form

  • js事件驱动机制 浏览器兼容处理方法

    3.1. 事件是如何产生的 * 第一种情况,用户对网页做了某些操作,比如,点击了一个按钮,产生点击事件. 第二种情况,用户没有对网页做操作,也可能产生事件,比如浏览器已经将整个页面加载完毕,会产生加载完成事件.当事件产生以后,浏览器会查找产生事件的节点有没有绑订相应的事件处理代码.如果有,则调用该代码来处理.如果没有,会继续向上查找父节点,有没有对应的事件处理代码(事件冒泡). 3.2. 绑订事件处理代码 ** 1) 绑订事件处理代码到html标记乊上 比如: <a id="a1"

  • 谈谈JavaScript中浏览器兼容问题的写法小议

    前言 JavaScript中很多坑,其中对浏览器的兼容也是一个问题,本文就简略的归纳了部分针对浏览器兼容问题的写法的例子,旨在便于查找.如果读者有什么好的意见建议,请留言交流,谢谢! window窗口大小 1.在IE9+.Chrome.Firefox.Opera以及Safari中 window.innerHeight获取浏览器窗口的内部高度 window.innerWidth获取浏览器窗口的内部宽度 var msg = "窗口宽度:" + window.innerHeight + &q

  • JS 实现 ajax 异步浏览器兼容问题

    废话不多说了,直接给大家贴代码了,具体代码如下所示: <td> <input type="button" value="订单详情" id="but<s:property value="#o.oid"/>" onclick="showDetail(<s:property value="#o.oid"/>)"/> <div id=&quo

  • Vue+iview+webpack ie浏览器兼容简单处理

    环境介绍: vue: ^2.5.2 iview: ^3.1.0 Webpack: ^3.8.1 前情提要: ie 浏览器不支持 ES6 Promise 的语法. ie8 及以下对 html5 标签不兼容(可以通过引入html5shiv包解决,本文不处理IE11的更低版本,故不提及此法). ie9 以下 对 CSS3 的不兼容,各种不兼容的细节比较多,这里不说明. ie10 及以下浏览器中不支持 dataset 方法(经学习实践发现ie11也是不支持的),而我在项目中使用了 iview, ivie

随机推荐