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树的根节点;

(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();//关闭新打开的窗口,(不同浏览器兼容性有差异,一些浏览器可以关闭任何窗口)

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

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

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

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

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

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();//用新文档替换当前文档(没有历史记录,很少用到)

可读可写

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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,681评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,710评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,623评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,202评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,232评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,368评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,795评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,461评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,647评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,476评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,525评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,226评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,785评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,857评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,090评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,647评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,215评论 2 341

推荐阅读更多精彩内容