いくつかのJS互換性のあるブラウザソリューション
- R&D開発プロセスで、我々は多くの場合、ブラウザの互換性の問題が発生したユーザーのブラウザのバージョン、およびのでわからないので、別のブラウザのために、JS構文の一部は同じではありません。今日、我々は助けることを願って、一般的なブラウザ互換性のあるイベントの一部を要約します
図1に示すように、非互換のインラインスタイルを取得します
- IEブラウザ:element.currentStyle [ATTR]。
- その他のブラウザ:getComputedStyle(要素、偽)[ATTR]
- ソリューション:
function getStyle(cssObj,attr){
if(cssObj.currentStyle){
return cssObj.currentStyle[attr];//针对ie浏览器获取非行间样式
}else{
return getComputedStyle(cssObj,false)[attr];//针对非ie浏览器获取非行间样式
};
}
2、イベントオブジェクトの互換性の問題
- IEブラウザ:window.event
- 他のブラウザ:オブジェクト.onイベント=関数(イベント){}
- ソリューション:
function fn(eve){
var e = eve || window.event;
}
3、互換性の問題をバブリングイベント
- IEブラウザ:eve.cancelBubble =はtrue。
- その他のブラウザ:eve.stopPropagation();
- ソリューション:
function stopBubbles(e){
if(e.stopPropagation){
//针对非ie浏览器
e.stopPropagation();
}else{
//针对ie浏览器
e.cancelBubbles = true;
}
}
4、ブラウザのデフォルトの動作の互換性の問題
- IEブラウザ:window.event.returnValue = falseは、
- その他のブラウザ:e.preventDefault();
- ソリューション:
if( e.preventDefault ){
//针对非ie浏览器
e.preventDefault();
}else{
//针对ie浏览器
window.event.returnValue = false;
}
5、イベントのデリゲートの互換性の問題
- IEブラウザ:e.srcElement。
- その他のブラウザ:e.target。
- ソリューション:
dom.onclick = function(eve){
var e = eve || window.event;
var target = e.target || e.srcElement;
if(target.nodeName == "LI"){
console.log(target.innerHTML);
}
}
図6に示すように、結合事象の互換モード
- 割り当て式:(DOM 0レベルのイベントバインディング)互換性の問題
- バック= [+タイプが "オン"]の要素;
- (DOMレベル2イベントバインディング):タイプを監視
- IEブラウザ:element.attachEvent( "上" +タイプ、背中)
- その他のブラウザ:(バック型)element.addEventListener
- ソリューション
function addEvent(ele,type,back){
if(ele.addEventListener){
//监听式:其他浏览器
ele.addEventListener(type,back)
}else if(ele.attachEvent){
//监听式:IE浏览器
ele.attachEvent("on"+type,back)
else{
//赋值式
ele["on"+type] = back;
}
}
7、互換性の問題を結合イベントを削除
- 割り当て式:(DOM 0レベルのイベントバインディング)互換性の問題
- [+型の "オン"]要素= NULL;
- (DOMレベル2イベントバインディング):タイプを監視
- IEブラウザ:element.detachEvent( "上" +タイプ、背中)
- その他のブラウザ:element.removeEventListener(タイプ、背中、偽)
- ソリューション
function removeEvent(ele,type,back){
if(ele.removeEventListener){
//监听式:其他浏览器
ele.removeEventListener(type,back,false);
}else if(ele.detachEvent){
//监听式:IE浏览器
ele.detachEvent("on" + type,back);
}else{
//赋值式
ele["on"+type] = null;
}
}
8、互換性の問題を取得するためにキーボードイベント
- IEブラウザ:event.which
- その他のブラウザ:event.keycode
- ソリューション
function code(eve){
var e=eve||window.event;
var code=e.keyCode||e.which;
}