JS跨瀏覽器兼容糯俗,一點(diǎn)點(diǎn)總結(jié)

不同的瀏覽器尿褪,對(duì)不同的/相同的屬性、方法等的支持程度也會(huì)有所差別得湘,要想達(dá)到滿意的效果杖玲,需要做一些處理、給不同的瀏覽器量體裁衣淘正,也就是所說的達(dá)到兼容摆马。
常見的處理方式:(能力檢測(cè)和瀏覽器檢測(cè))
1、三目運(yùn)算式
typeof A=='B'?A:C
瀏覽器的類型A是B嗎鸿吆,是的話就用A囤采,否則就用C。
2惩淳、邏輯或(沒有1可靠)
var A=B||C
瀏覽器存在B或C其一蕉毯,或者都存在。都存在默認(rèn)用B。
3代虾、檢測(cè)瀏覽器引擎和版本號(hào)
BrowserDetect.browser == 'Internet Explorer' && BrowserDetect.version <= 7
根據(jù)不同的瀏覽器做不同的方案處理进肯。
上栗子

1、獲取窗口相對(duì)于屏幕左邊和上邊的位置

var leftPos=(typeof window.screenLeft=='number')?window.screenLeft:window.screenX;
var topPros=(typeof window.screenTop=='number')?window.screenTop:window.screenY;

IE棉磨、Safari坷澡、Opera 和Chrome 都提供screenLeft 和screenTop 屬性,分別用于表示窗口相對(duì)于屏幕左邊和上邊的位置含蓉。Firefox 則在screenX 和screenY 屬性中提供相同的窗口位置信息频敛,Safari 和Chrome 也同時(shí)支持這兩個(gè)屬性。但是不建議在Opera中使用screenX 和screenY馅扣。
在IE斟赚、Opera 中,screenLeft 和screenTop 中保存的是從屏幕左邊和上邊到由window 對(duì)象表示的頁(yè)面可見區(qū)域的距離(包括工具欄)差油,而在Chrome拗军、Firefox 和Safari 中,screenY 或screenTop中保存的是整個(gè)瀏覽器窗口相對(duì)于屏幕的坐標(biāo)值蓄喇,即在窗口的y 軸坐標(biāo)為0 時(shí)返回0发侵。

2、跨瀏覽器獲取頁(yè)面視口的大小妆偏。

outerWidthouterHeight返回瀏覽器窗口本身的尺寸大小刃鳄。而innerWidth 和innerHeight則表示該容器中頁(yè)面視圖區(qū)的大小(減去邊框?qū)挾龋?/p>

document.documentElement.clientWidth 和
document.documentElement.clientHeight 中保存了頁(yè)面視口的信息钱骂。在IE6中叔锐,這些屬性在標(biāo)準(zhǔn)模式(document.compatMode == "CSS1Compat")下才有效,在混雜模式(document.compatMode == "BackCompat")下必須通document.body.clientWidthdocument.body.clientHeight來獲取

var pageWidth=window.innerWidth,
    pageHeight=window.innerHeight;
if(typeof pageWidth!='number'){
  if(document.compatMode=='CSS1ompat'){
    pageWidth=document.documentElement.clientWidth;
    pageHeight=document.documentElement.clientHeight;
  }else{
     pageWidth=document.body.clientWidth;
    pageHeight=document.body.clientHeight;
  }
}

3见秽、瀏覽器兼容getElementsByClassName()方法

/**
 * @param {obj,dom樹中搜索的起點(diǎn),結(jié)果不包含該節(jié)點(diǎn)} node
 * @param {string,要獲取的類名} classname
 * @return {list列表,帶有classname的元素}
 *不適用于多個(gè)類名
 */
function getElementsByClassName(node,classname){
    if(node.getElementsByClassName){
        return node.getElementsByClassName(classname);
    }else{
        var results=[],
            elems=node.getElementsByTagName('*');//獲取該節(jié)點(diǎn)下的所有元素節(jié)點(diǎn)
            console.log(elems)
        for(var i=0;i<elems.length;i++){
            if(elems[i].className.indexOf(classname)!=-1){
                results[results.length]=elems[i];
            }
        }
        return results;
    }
}

4愉烙、關(guān)于ajax

  • 獲取請(qǐng)求對(duì)象
function getHTTPObject(){
    if(typeof XMLHttpRequest=='undefined'){
        XMLHttpRequest=function(){
//ie低版本
            try{return new ActiveXObject('Msxml2.XMLHTTP.6.0');}
                catch(e){}
            try{return new ActiveXObject('Msxml2.XMLHTTP.3.0');}
                catch(e){}
            try{return new ActiveXObject('Msxml2.XMLHTTP');}
                catch(e){}
            return false;
        }
    }
    return new XMLHttpRequest();
}
  • 獲取響應(yīng)
function getNewContent(){
    var request=getHTTPObject();
    if(request){
        request.open('GET','url.txt',true);//異步get請(qǐng)求
        request.onreadystatechange=funciton(){//服務(wù)器返回響應(yīng)時(shí)觸發(fā)該函數(shù)
            if(request.readyState==4){//4表示完成,0表示初始化解取,1表示加載步责,2表示加載完成,3表示正在交互
                var para=document.createElement('p');
                var text=document.createTextNode(request.responseText);//創(chuàng)建的文本節(jié)點(diǎn)就是返回的響應(yīng)數(shù)據(jù)
                para.appendChild(text);
                console.log(para);
            }
        };
        request.send(null);//get請(qǐng)求把發(fā)送的數(shù)據(jù)放到url上禀苦,post請(qǐng)求放到send上
    }else{
        alert('your browser do not support XMLHttpRequest');
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蔓肯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子伦忠,更是在濱河造成了極大的恐慌省核,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昆码,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)赋咽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門旧噪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脓匿,你說我怎么就攤上這事淘钟。” “怎么了陪毡?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵米母,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我毡琉,道長(zhǎng)铁瞒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任桅滋,我火速辦了婚禮慧耍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丐谋。我一直安慰自己芍碧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布号俐。 她就那樣靜靜地躺著泌豆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吏饿。 梳的紋絲不亂的頭發(fā)上践美,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音找岖,去河邊找鬼陨倡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛许布,可吹牛的內(nèi)容都是我干的兴革。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蜜唾,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼杂曲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起袁余,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤擎勘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后颖榜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棚饵,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡煤裙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了噪漾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硼砰。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖欣硼,靈堂內(nèi)的尸體忽然破棺而出题翰,到底是詐尸還是另有隱情,我是刑警寧澤诈胜,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布豹障,位于F島的核電站,受9級(jí)特大地震影響焦匈,放射性物質(zhì)發(fā)生泄漏血公。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一括授、第九天 我趴在偏房一處隱蔽的房頂上張望坞笙。 院中可真熱鬧,春花似錦荚虚、人聲如沸薛夜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梯澜。三九已至,卻和暖如春渴析,著一層夾襖步出監(jiān)牢的瞬間晚伙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工俭茧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咆疗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓母债,卻偏偏與公主長(zhǎng)得像午磁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子毡们,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的衙熔。 ??事件登颓,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,490評(píng)論 1 11
  • ??ECMAScript 是 JavaScript 的核心框咙,但如果要在 Web 中使用 JavaScript咕痛,那么...
    霜天曉閱讀 877評(píng)論 0 0
  • 前端必讀:瀏覽器內(nèi)部工作原理[https://kb.cnblogs.com/page/129756/] 作者: T...
    我是強(qiáng)強(qiáng)閱讀 1,146評(píng)論 0 2
  • HTML 5 HTML5概述 因特網(wǎng)上的信息是以網(wǎng)頁(yè)的形式展示給用戶的,因此網(wǎng)頁(yè)是網(wǎng)絡(luò)信息傳遞的載體扁耐。網(wǎng)頁(yè)文件是用...
    阿啊阿吖丁閱讀 3,887評(píng)論 0 0
  • 家是我們心靈的港灣暇检,是溫馨的地方产阱,但怎么會(huì)有暴力呢婉称?且聽聽以下這些: 老公對(duì)老婆:“就你事多,你到底能不能快點(diǎn)肮沟拧王暗!...
    z飛鳥與魚h閱讀 211評(píng)論 1 4