不同的浏览器,对不同的/相同的属性、方法等的支持程度也会有所差别,要想达到满意的效果,需要做一些处理、给不同的浏览器量体裁衣,也就是所说的达到兼容。

常见的处理方式:(能力检测和浏览器检测)

1、三目运算式

typeof A=='B'?A:C

浏览器的类型A是B吗,是的话就用A,否则就用C。

2、逻辑或(没有1可靠)

var A=B||C

浏览器存在B或C其一,或者都存在。都存在默认用B。

3、检测浏览器引擎和版本号

BrowserDetect.browser == 'Internet Explorer' && BrowserDetect.version <= 7

根据不同的浏览器做不同的方案处理。

上栗子

1、获取窗口相对于屏幕左边和上边的位置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 属性,分别用于表示窗口相对于屏幕左边和上边的位置。Firefox 则在screenX 和screenY 属性中提供相同的窗口位置信息,Safari 和Chrome 也同时支持这两个属性。但是不建议在Opera中使用screenX 和screenY。

在IE、Opera 中,screenLeft 和screenTop 中保存的是从屏幕左边和上边到由window 对象表示的页面可见区域的距离(包括工具栏),而在Chrome、Firefox 和Safari 中,screenY 或screenTop中保存的是整个浏览器窗口相对于屏幕的坐标值,即在窗口的y 轴坐标为0 时返回0。

2、跨浏览器获取页面视口的大小。

outerWidth 和outerHeight返回浏览器窗口本身的尺寸大小。而innerWidth 和innerHeight则表示该容器中页面视图区的大小(减去边框宽度)。

document.documentElement.clientWidth 和

document.documentElement.clientHeight 中保存了页面视口的信息。在IE6中,这些属性在标准模式(document.compatMode == "CSS1Compat")下才有效,在混杂模式(document.compatMode == "BackCompat")下必须通document.body.clientWidth和document.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树中搜索的起点,结果不包含该节点} node

* @param {string,要获取的类名} classname

* @return {list列表,带有classname的元素}

*不适用于多个类名

*/function getElementsByClassName(node,classname){    if(node.getElementsByClassName){        return node.getElementsByClassName(classname);

}else{        var results=[],

elems=node.getElementsByTagName('*');//获取该节点下的所有元素节点

console.log(elems)        for(var i=0;i

results[results.length]=elems[i];

}

}        return results;

}

}

4、关于ajax获取请求对象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();

}获取响应function getNewContent(){    var request=getHTTPObject();    if(request){

request.open('GET','url.txt',true);//异步get请求

request.onreadystatechange=funciton(){//服务器返回响应时触发该函数

if(request.readyState==4){//4表示完成,0表示初始化,1表示加载,2表示加载完成,3表示正在交互

var para=document.createElement('p');                var text=document.createTextNode(request.responseText);//创建的文本节点就是返回的响应数据

para.appendChild(text);                console.log(para);

}

};

request.send(null);//get请求把发送的数据放到url上,post请求放到send上

}else{

alert('your browser do not support XMLHttpRequest');

}

}

作者:fenerchen

链接:https://www.jianshu.com/p/d830d08ac9d8

js ajax 浏览器兼容,JS跨浏览器兼容,一点点总结相关推荐

  1. js ajax通用方法,JS—Ajax(初步使用)

    Ajax Asynchronous JavaScript XML 这一技术最早是用来向服务器端请求以xml这种结构表示的数据时,可以不用卸载页面,就能够向服务器端请求额外的数据. 但是现在呢,Ajax ...

  2. cnzz统计 检测浏览器原理(跨浏览器开发实用源码)

    CNZZ根据用户代理字符串识别浏览器类型 JavaScript实现代码如下 (function() { var Client = function() { var engine = { ie: 0, ...

  3. cnzz统计检测浏览器原理(跨浏览器开发实用源码)

    cnzz根据用户代理字符串识别浏览器类型 ,JavaScript实现代码如下 : 1 (function() { 2 var Client = function() { 3 var engine = ...

  4. 纯生js ajax,纯生js实现Element中input组件的部分功能(慢慢完善)并封装成组件

    现在实现的有基础用法.可清空.密码框,参考链接:https://element.eleme.cn/#/zh-CN/component/input HTML代码:想要测试哪个组件,直接将对应组件解开注释 ...

  5. flot.js ajax,jquery.flot.js简单绘制折线图用法示例

    本文实例讲述了jquery.flot.js简单绘制折线图用法.分享给大家供大家参考,具体如下: 1.完整实例代码: 折线图 $(function() { AlPriceQuery(); }); fun ...

  6. prototype.js ajax.request,prototype.js的Ajax对象分享

    我想prototype. 代码如下: var url = 'http://yoursever/your/your'; var pars = 'id=xxx'; var myAjax = new Aja ...

  7. 兼容浏览器_你知道什么是跨浏览器兼容吗?

    文章来自:卓码软件测评 在过去的二十年里,互联网得到了巨大的发展.1998年只有大约240万个网站,而现在已经有大约18亿个了,这正好是74900%的增长.不仅如此,互联网用户的数量也从1998年的1 ...

  8. js粘贴板为什么获取不到图片信息_【第1829期】复制黏贴上传图片和跨浏览器自动化测试...

    前言 这个操作体验倒是不错.今日早读文章由丁香园@蒋璇投稿分享. @蒋璇, 前端开发攻城狮, 现任职于丁香园. 英语爱好者, 测试驱动开发(TDD)&行为驱动开发(BDD)推崇者. 先专注于 ...

  9. 编写跨浏览器兼容的 CSS 代码的金科玉律

    作为 Web 设计师,你的网站在各种浏览器中有完全一样的表现是很多人的目标,然而这是一个永远无法真正实现的目标,很多人认为,完美的跨浏览器兼容并不必要,这样说虽然没错,但在很多情形,一种近似的兼容还是 ...

  10. 系统上线发布清单_跨浏览器测试清单上线之前

    系统上线发布清单 This article was originally published on LambdaTest. Thank you for supporting the partners ...

最新文章

  1. OCP12C题库,62数据库备份与恢复(admin,install and upgrade accelerated, backup and recovery workshop -62)(新增)
  2. delete语句与reference约束冲突怎么解决_mysql update语句和原数据一样会更新么
  3. java实现可视化报表_如何在Power BI中记录报表可视化?
  4. MySQL数据库服务器优化详细
  5. JQuery 对控件的事件操作
  6. 我看中国软件---技术篇
  7. 人生真是圆的,从BASIC开始的程序人生,又回到了BASIC,难道。。。。。
  8. hibernate笔记--缓存机制之 二级缓存(sessionFactory)和查询缓存
  9. CI 笔记 easyui 结合后,左侧导航跳转问题
  10. 浙大PAT 乙级(Basic Level) Practice 题解合集(全AC版)
  11. laravel admin grid文档
  12. Android NFC M1卡读写芯片卡读写(CPU卡读写)(RFID读写)
  13. nginx网关与gateway网关的区别
  14. 图片打印设置之适应边框打印
  15. 计算机组成原理——输入/输出系统(I/O接口外设中断)
  16. 第71次上IM课(IMO72:About Friends)
  17. python命名规则数字开头的成语_day01 Python基础
  18. 赛博朋克2077漫威黑寡妇捏脸
  19. ubuntu ceres-solver 安装
  20. MNIST导入图片数据集

热门文章

  1. Sklearn 损失函数如何应用到_Sklearn库主要模块功能简介
  2. c语言 写出raw文件,求指导,如何用c语言实现读取*.raw格式图像
  3. 全网最详系列教程-nacos配置中心详解-NameSpace、Group、DataID
  4. java.lang.AbstractMethodError: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.cho
  5. 嵌入式Servlet容器
  6. 最短网络 Agri-Net
  7. python制作射击游戏_用python3从零开始开发一款烧脑射击游戏#2
  8. rabbitmq+redis在优化秒杀商品接口中的使用实例
  9. Mycat社区出版: 分布式数据库架构及企业实践——基于Mycat中间件
  10. PostgreSQL在win7上安装详细步骤