17 js12 BOM

1、BOM:浏览器对象模型(Browser object model),主要处理浏览器窗口和框架,封装了一系列与浏览器交互的方法和接口;其通过js来访问、控制、修改浏览器(准确的说是浏览器窗口);

DOM:封装系列方法操作html和xml,BOM封装系列方法来操作浏览器,准确的说是操作浏览器窗口,window表示的便是浏览器窗口(iframe框架引入的页面也是窗口),所以玩转BOM就是玩转window对象,window对象下有很多属性和方法;[如果聚焦到属性,这些属性也都是对象,也有自己的属性和方法]

窗口:浏览器网页窗口以及iframe引入的都称之为窗口,iframe框架引入的网页有完整的文档结构,等同于是新的网页(html,head,body都有);而可视区窗口指的是html文档内容呈现出的部分;

window对象的两层含义:(1).其表示浏览器窗口或框架;(2).window就是全局对象,window对象的属性便是全局变量,例如:window.document  ------>>> document即可(window可省略);

------>>>>>>

2、window对象的属性和方法:window对象的属性便是一系列功能的集合,包含:window对象/Navigator/History/Location/Screen等;

(1).document: window对象的属性包含了document属性,因此通过window对象的document属性就可以访问、检索、修改文档内容与结构,document对象又是dom树的根节点;

17 js12 BOM_第1张图片

(2).属性和方法:

[1].window.innerWidth/Height; // 可视区宽/高:包含滚动条;clientWidth;/clientHeight;//ie9以下的属性,还有些小区别,其表示的可视区宽/高不包含滚动条;                                          [2].pageXOffset;/pageYOffsset;可设置但不可操控(滚动条不会到达指定位置);应用场景:图片的懒加载(大型购物网站为了用户体验需要保证响应迅速,往往先把首屏内容展示给用户,剩下的内容按需加载即可;也许用户压根不看首屏直接搜索,避免把所有内容都加载好占用带宽,浪费流量);[3].window.screenX/Y;//chrome,firefox支持;window.screenLeft/Top;//ie opera支持,表示的是窗口左上角在屏幕中的x/y坐标,只读,得到数字; screenX/Y = screenX/Y || screenLeft/Top;                          [4].window.top/length/parent/self;涉及到引入iframe框架后的操作,父子域,同源策略等(iframe引入的是完整的文档结构,有自己的window);top:嵌套父子页面中表示最顶层;self是拿到自身;所以平时变量声明中不要声明var top/parent/name/self等,避免冲突;                                      [5].window.name:窗口的名字,可读/可写,其与页面内容无关,只是给窗口取名字而已;

[6].setInterval();/setTimeout();/clearInterval();/clearTimeout();/scroll();scrollTo();/scrollBy();[7].open();/close();//window.open();//方法返回值为新窗口的window;close();//关闭新打开的窗口,(不同浏览器兼容性有差异,一些浏览器可以关闭任何窗口)

17 js12 BOM_第2张图片

[8].window系列弹窗是原生的UI部分,由于太粗糙,日常开发中都不用原生window的弹窗;

17 js12 BOM_第3张图片

window.alert("hello"+\n+"world");//报错;window.alert("hello+\n+world");//hello+ 换行 +world;          window.alert("hello"+"\n"+"world");// 带有折行的对话框

------->>>>>window对象有很多属性,单独就属性来探讨,其是对象有独立的属性和方法;

(3).navigator对象:浏览器客户端的信息(引用的Navigator对象,其是构造函数,系统用来构造,不允许自定义) [平时谈到的Navigator对象有些不严格]

17 js12 BOM_第4张图片

navigator.appVersion;/ navigator.userAgent,第二个更加全面一些,包含浏览器的信息;应用场景:开发中为了兼容不同的浏览器往往需要开发多个版本的同一网页,然后将其部署到服务器中,当用户通过浏览器发出网络请求的过程中,实际会将所使用的浏览器信息也就是navigator.userAgent上的信息,和http:协议一起发送给服务器(当作报文),然后服务器根据浏览器的信息返回相应的网页;上述为后台应用场景,浏览器端也有很多应用场景,例如通过其来判断所处的平台是浏览器端还是移动端,提取有效数据;

17 js12 BOM_第5张图片

navigator.cookieEnabled//返回是否启用cookie的布尔值;(cookie就是个文件,里面保存的用户名/密码,后端有相应的时间机制,若是几小时内登录便不需要再次输入用户名和密码)

navigator.onLine//返回系统是否脱机(没联网)的布尔值;(应用场景:若是没有脱机,则进行网络请求最新的网页内容,若是脱机,则返回缓存的网页内容,其也是离线缓存的依据)

(4).history对象:浏览器窗口中访问过的URL;(html5对其进行了很多补充)

history.length;//访问过的URL数量;history.back();//后退;history.forward();//前一个;history.go();//参数为数字(正负皆可),加载到某个具体的页面;[back();和go();无参数,目前浏览器也支持填入参数加载到某页面,前进后退按钮底层调用的便是该方法]

(5).location对象:当前URL的信息;属性都是可读可写;

https://www.baidu.com/s?wd=URL&rsv_spt=1&rsv_iqid=0xd61dd2b20002cb56#dd                          url:统一资源定位器;协议名;域名(www:baidu.com:443),端口号可省略,https:443,http:80;              主机名:物理地址; /s: 路径; ?以及后面的&,=都是参数(经过编码后的参数);   #:锚点;

location.href;//返回完整的URL;location.hash;//返回从#开始的值;location.host;//返回主机名和当前URL的端口号;location.hostname;//返回主机名;location.pathname;//URL中的路径部分;location.port;//返回端口号;location.protocol;//返回协议名;location.search;//从?开始的URL部分,查询;

location.assign();//加载新文档;location.reload();//重新加载文档,参数选填,若是不填或者是填false则取消浏览器缓存的文档;location.replace();//用新文档替换当前文档(没有历史记录,很少用到)

17 js12 BOM_第6张图片
可读可写

补充:操作过程中页面跳转或刷新,若只是修改锚点页面并不会刷新(特性现象),URL任何部分的修改整个地址栏便产生了变化,由于锚点的特性,如今开发更倾向于用户体验感更好的单页面应用(vue框架),锚点的改变代表着路由的变化;(锚点最原生的应用是:点击固定的侧边栏跳转到相应的位置,如今单页面应用属于锚点的高级应用)

(6).screen对象:客户端显示屏幕的信息;js可以利用这些信息来优化它们的输出,以达到用户的显示要求,一个程序可以根据显示器的尺寸来选择使用大图像还是使用小图像,它还可以根据显示器的颜色深度选择使用16位色还是使用8位色的图形;js程序还可以根据屏幕尺寸的信息将新的浏览器窗口定位在屏幕中间;[根据屏幕信息作出相应的改变]

screen.width/height;//返回显示器屏幕的宽/高;包含任务栏;

screen.availWidth/availHeight;//返回显示器屏幕的宽/高;(除去window的任务栏)

【注:使用对象就是小写的形式,大写的即为构造函数的函数名,要加以区分,window/Window】

你可能感兴趣的:(17 js12 BOM)