【盘一盘】 005 《JavaScript高级程序设计(第3版)》(二)BOM

JavaScript高级程序设计(第3版)

BOM(浏览器对象模型)
要说BOM是什么东西,可以需要和DOM一起来描述。

看一下书中的名词解释:
BOM(浏览器对象模型),提供与浏览器交互的方法和接口。
DOM(文档对象模型),提供访问和操作网页内容的方法和接口。

很好,不知所云。

在来看下书中的如何描述BOM和DOM分别能做哪些事情:

BOM:

  • 弹出新浏览器窗口的功能
  • 移动、缩放和关闭浏览器窗口的功能
  • 提供浏览器详细信息的navigator对象
  • 提供浏览器所加载页面的详细信息的location对象
  • 提供用户显示器分辨率详细信息的screen对象
  • 对cookies的支持
  • 像XMLHttpRequest 和 IE的ActiveXObject 这样的自定义对象

DOM:

  • DOM1
    • DOM核心(DOM Core):映射基于XML的文档结构,以便简化对文档中仁义部分的访问和操作。
    • DOM HTML:针对HTML的对象和方法。
  • DOM2
    • DOM视图(DOM Views):定义了跟踪不同文档(例如,应用CSS之前和之后的文档)视图的接口
    • DOM事件(DOM Events):定义了基于CSS为元素应用样式的接口
    • DOM遍历和范围(DOM Traversal and Range):定义了遍历和操作文档树的接口。
  • DOM3
    • DOM加载和保存(DOM Load and Save):引入了以统一方式加载和保存文档的方法
    • DOM验证(DOM Validation):新增了验证文档的方法
    • DOM核心扩展:支持XML Infoset、XPath和XML Base

想必单纯听BOM和DOM的时候,你并不能知道这中文翻译过来的解释是什么意思。BOM其实就像是我们房间的整体结构,你房间的信息(window、screen)、房间的管线信息(location、location、cookies)、房间在当前区域的市政规划(navigator)。BOM就如同没有装修房子前的基本信息,在开发时随时可以获取当前网页所处的环境和信息,并且可以为网页存放一些临时或永久的信息,保证开发心知肚明。DOM就与BOM相反了。DOM就是房间里的施工图了,你想在哪里显示个字,在哪里放张图片,完全交给了DOM来处理。同时DOM具备单独将放冰箱的位置换成电视。当然,换成智能电视,可以控制他,那这个DOM元素就是具备操作能力,即事件。涂个粉色的墙吧,让CSS来协助帮忙,告诉CSS是涂哪面墙就可以。
所以,BOM可以理解为获取当前页面所在的基本信息,和所在浏览器信息。DOM可以理解为获取用户见到的,看到的页面内容。

接下来,就是逐一分析各个部分了。先从BOM开始吧。请翻到P211面第8章。

BOM操作:
BOM既然是获取浏览器当前的基本信息,这些信息就放在各个“对象”的手上?!岸韵蟆?,顾名思义就是目标物,可以向它索取你必要的内容。举个例子,你如果想知道当前浏览器的宽度和高度,有一个叫“window”的“对象”。只需要window.screen.availHeight(高度)、window.screen.availWidth(宽度),你需要的数据就能得到。BOM到底有多少“对象”呢?

  • window对象
  • location对象
  • navigator对象
  • screen对象
  • history对象

window对象。这个对象是BOM的核心对象,核心在于它能干很多事情》》》

  • 全局作用域
    • 可以直接对window对象新增或删除变量甚至函数。例如window.age = 29。
    • 那我也可以使用var age = 29来定义变量。那他们有什么本质上的区别吗?
      • 在于delete操作符删除上。全局变量delete age 会报错或者返回false。window对象通过delete window.age可以直接删除。
    • Eg.
      • window.age = 29
      • delete window.age
  • 窗口关系及框架
    • 这个目前对我来说比较少用了,目前使用的是单页面渲染,以前要动态显示数据,需要通过ifarme来嵌套处理。
    • 获取三种不同窗口信息:window获取当前窗口信息,top获取最外层窗口信息,parent获取当前窗口的父级信息
    • eg.
      • window.frames[0]获取当前窗口信息
      • top.frames[0] 获取最外层窗口信息
      • parent.frames[0] 获取当前上一级(父级)窗口信息
  • 窗口位置
    • 获取窗口位置的方法有很多种,并不是因为有好几种代码可以获取,而是因为各个浏览器之间的问题,导致了兼容上出现了不同的情况。比如有部分浏览器是通过screenLeft来确定屏幕的左边,而有些浏览器是通过xcreenX来确定屏幕的左边。为了解决跨屏幕兼容的问题。作者提供如下调整。
    • 当然,作者还介绍了窗口偏移window.moveTo(0,0)屏幕位置和window.moveBy(0,0)屏幕移动偏移量。
    • eg
      • var leftPos = (typeof window.screenLeft == "number") ? window.screenLeft : window.screenX;
      • var topPos = (typeof window.screenTop == "number") ? window.screenTop : window.screenY;
  • 窗口大小
    • 这里还挺有意思的,作者讲到这点时,似乎觉得无奈——获取窗口大小不是一件简单的事情。
    • 由于各个浏览器对窗口大小的定义不同。但目前有两种相对可行的获取大小的方法。
    • window.innerWidth(),window.innerHeight()
    • document.documentElement.outerWidth(),document.documentElement.outerHeight()
    • 对于这种又是兼容问题,作者提出如下方法。
var pageWidth = window.innerWidth, pageHeight = window.innerHeight;
if (typeof pageWidth != "number”){
    if (document.compatMode == "CSS1Compat”){
        pageWidth = document.documentElement.clientWidth;
        pageHeight = document.documentElement.clientHeight;
    } else {
        pageWidth = document.body.clientWidth;
        pageHeight = document.body.clientHeight;
    }
}
  • 导航和打开窗口

    • window.open() 导航到一个特定的URL
    • 其中open中有四个参数(URL,窗口目标,一个特性字符串,一个表示新页面是否取代浏览器历史记录中当前加载页面的布尔值)
    • eg
    • window.open("[http://www.wrox.com/","wroxWindow](http://www.wrox.com/)", "height=400,width=400,top=10,left=10,resizable=yes");
    • URL:写入要弹出的窗口所对应的地址
    • 窗口目标:调转到新窗口的名字
    • 一个特性字符串:弹出的新窗口的配置信息,以逗号隔开的字符串
      • 配置参数如下:
      • 配置表
    • 间歇调用和超时调用
      • 超时调用:

        • var timer = setTimeout(() => {}, 1000);

        • 指定时间过后执行代码

        • 中途取消执行:clearTimeout(timer)

      • 间歇调用

        • var timer2 = setInterval(() => {}, 1000);
        • 每隔指定的时间就执行一次代码
        • 取消循环执行:clearInterval(timer2)
  • 系统对话框

  • 这里常用的三种对话框:alert()警告框、comfirm()确认框、prompt()提示输入框

  • 那还有两种相对少用,但认识一下:window.print()显示“打印”对话框、window.find()显示“查找”对话框

总结

这一节,重点了解了什么是BOM,并了解了BOM的核心对象——window。后续我们会共同来讨论其他几个对象的实际运用。

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

推荐阅读更多精彩内容