BOM-01 (BOM的对象)

BOM: Browser Object Model

      //  浏览器 对象 模型

1. 什么是BOM: 专门操作浏览器窗口的一套对象和函数的集合

2. 何时: 今后只要希望操作浏览器的窗口时或获取浏览器的信息时,都用BOM

3. 最大的问题: BOM没有标准!兼容性极差!

4. BOM包括一系列对象:

                          window 

     history   location   navigator    document     screen     event

     历史记录  地址栏   基本信息    网页        屏幕       事件

5. window对象: 3个角色
(1). 代替ES标准中的global对象充当全局作用域对象

凡是自己定义的全局变量和函数都是默认保存在window对象中

(2). 保存了ESDOMBOM的所有的对象和函数

(3). 代表了当前浏览器窗口:

a. 获得窗口大小:

1). 完整窗口大小: window.outerWidth    window.outerHeight

外部

2). 仅文档显示区部分的大小: window.innerWidth   window.innerHeight

  内部

b. 可滚动窗口中的网页:

1). window.scrollTo(0, 纵向滚动到的位置)

  滚动

2). window.scrollBy(0, 纵向滚动过的距离)

    c. 还可打开和关闭窗口:

1). window.open("http://tmooc.cn","_blank");

2). window.close()

打开链接4种方式:

(1). 当前窗口打开新链接,可后退

a. html: <a href="http://tmooc.cn" target="_self">

b. js: window.open("http://tmooc.cn", "_self")

(2). 在当前窗口打开新链接禁止后退

a. js: location.replace("url")

b. 禁止后退的原理: 请地址栏(location),用新url地址,替换history中当前位置的旧地址

(3). 新窗口打开新链接可同时打开多个

a. html: <a href="http://tmooc.cn" target="_blank">

b. js: window.open("http://tmooc.cn", "_blank")

(4). 新窗口打开新链接同一个链接只能打开一个窗口

a. html: <a href="http://tmooc.cn" target="自定义窗口名">

b. js: window.open("http://tmooc.cn", "自定义窗口名")

  c. 原因:

1). 其实我们打开的每个窗口,在浏览器内存中都有一个唯一的窗口名

2). 浏览器规定相同窗口名的窗口只能打开一个

3). 新打开的同名窗口覆盖先打开的同名窗口

4). 窗口名默认保存在window.name属性中所以我们自己起变量名时一定要躲开"name"

5). 如果window.name属性为""的窗口,浏览器会自动分配随机窗口名

6). 其实a元素的target属性和window.open()第二个参数,是在给新窗口起名字!

7). 所以: 如果a元素的targetwindow.open()的第二个参数定义的是一个自定义窗口名,则这个窗口只能打开一个!

8). 预定义窗口名:

i. _self: 用当前窗口自己的名字作为新打开的窗口名,结果新窗口会覆盖当前窗口

ii. _blank: 给新窗口指定窗口名结果浏览器会为新窗口自动随机分配不重复的窗口名,所以反复打开多个,都不会重名

(5). 示例: 四种打开新连接的方式总结

<html>

<head>

<meta charset="utf-8"/>

<title>打开新链接方式总结</title>

<script>

/*打开新链接方式总结:

1. 在当前窗口打开,可后退

2. 在当前窗口打开,不可后退

3. 在新窗口打开,可打开多个

4. 在新窗口打开,只能打开一个

*/

//1. 在当前窗口打开新链接,可后退

function open1(){

  window.open("http://tmooc.cn","_self")

}

//2. 在当前窗口打开新链接,禁止后退

function open2(){

  location.replace("http://tmooc.cn")

}

//3. 在新窗口打开新链接,同一个链接可打开多个

function open3(){

  window.open("http://tmooc.cn","_blank")

}

//4. 在新窗口打开新链接,同一个链接只能打开一个

function open4(){

  window.open("http://tmooc.cn","tmooc")

}

</script>

</head>

<body>

<h3>1. 在当前窗口打开新链接,可后退</h3>

<a href="http://tmooc.cn" target="_self">go to tmooc</a><br/>

<a href="javascript: open1()">go to tmooc(js)</a>

<h3>2. 在当前窗口打开新链接,禁止后退</h3>

<a href="javascript: open2()">go to tmooc(js)</a>

<h3>3. 在新窗口打开新链接,同一个链接可打开多个</h3>

<a href="http://tmooc.cn" target="_blank">go to tmooc</a><br/>

<a href="javascript: open3()">go to tmooc(js)</a>

<h3>4. 在新窗口打开新链接,同一个链接只能打开一个</h3>

<a href="http://tmooc.cn" target="tmooc">go to tmooc</a><br/>

<a href="javascript: open4()">go to tmooc(js)</a>

</body>

7. history对象:

(1). 什么是: 浏览器内存中专门保存当前窗口打开后,成功访问过的url的历史记录栈(数组)

(2). 原理

a. 每打开一个浏览器窗口首先会将当前窗口的地址push()history中保存

b. 在这个窗口中,每访问一个新url地址,就会将新url地址再次push()history中保存

(3). 能否后退: 如果history中当前正在显示的url下方还有刚才访问过的旧的url则浏览器可后退

(4). 只开放了一个函数: history.go(n)

a. history.go(-1)  后退一步
b. history.go(1)   前进一步

c. history.go(0)   刷新

(5). 示例步骤:

a. 先把每个页面中空的 <a href="javascript: "> 补齐

比如: 前进一步 <a href="javascript: history.go(1)">

  前进二步 <a href="javascript: history.go(2)">

  后退一步 <a href="javascript: history.go(-1)">

  后退 <a href="javascript: history.go(-2)">

b. 运行9-1.html

c. 依次点页面中的23两个链接,目的让当前窗口的history中又三个地址的历史记录: 分别时123

d. 点击每个页面中的前进x步或后退x步链接体会用代码实现前进后退

8. location:

  地址

(1). 什么是: 专门保存当前浏览器正在打开的url信息的对象,同时还提供了页面跳转的相应方法

(2). 何时: 只要希望获得当前浏览器正在打开的url的信息或希望执行页面跳转操作时

(3). 如何:

a. 可分段获得当前正在打开的url的各个部分: (仅限于浏览器中别的平台没有)

1). location.href  完整的url

2). locaiton.protocol  协议

3). location.host  主机名+端口号

4). location.hostname  主机名

5). location.port   端口号

6). location.pathname  相对路径名

7). location.search   ?查询字符串
8). location.hash     #锚点地址

b. 方法:

1). 也能实现在当前窗口打开,可后退:

location.href="url"

2). 在当前窗口打开禁止后退:

location.replace("url")

3). 刷新: location.reload();

9. navigator:

(1). 什么是: 保存当前浏览器配置信息的对象

(2). 何时: 想获得浏览器的配置信息时

(3). 如何:

a. 获得浏览器已安装的插件信息:

1). navigator.plugins 集合中保存了当前浏览器已经安装的所有插件信息

       浏览器  插件

2). 判断是否安装某个插件: 强行用插件完成名称访问plugins中的元素

如果navigator.plugins["完整插件名"]!==undefined 说明装了这个插件

否则说明没装这个插件

3). 示例: 判断是否安装了某个插件

//判断当前浏览器是否安装Chrome PDF Viewer插件

if(navigator.plugins["Chrome PDF Viewer"]!==undefined){

  document.write(`<h3>已安装PDF插件,可以浏览PDF电子书</h3>`)

}else{

  document.write(`<h3>未安装PDF插件,<a href="javascript:;">点此下载安装</a></h3>`)

}

//判断当前浏览器是否安装Flash插件

if(navigator.plugins["Shockwave Flash"]!==undefined){

  document.write(`<h3>已安装Flash插件,可以播放Flash动画</h3>`)

}else{

  document.write(`<h3>未安装Flash插件,<a href="javascript:;">点此下载安装</a></h3>`)

}

b.userAgent:

 用户代理

  浏览器

1). 包含浏览器的名称,版本号和内核信息

2). 何时: 判断一个浏览器是哪种浏览器的哪个版本时,都用userAgent

猜你喜欢

转载自www.cnblogs.com/codexlx/p/12462637.html