原生js学习笔记5——BOM操作

作者: 小全同学 | 来源:发表于2016-03-09 15:21 被阅读987次

什么是BOM

BOM:Browser Object Model 是浏览器对象模型,浏览器对象模型提供了独立与内容的、可以与浏览器窗口进行互动的对象结构,BOM由多个对象构成,其中代表浏览器窗口的window对象是BOM的顶层对象,其他对象都是该对象的子对象。

目前主流浏览器介绍

  • IE——11: 国内用得最多的IE浏览器,历来对W3C标准支持差。从IE10开始支持ES6标准;
  • Sarafi:Apple的Mac系统自带的基于Webkit内核的浏览器,从OS X 10.7 Lion自带的6.1版本开始支持ES6,目前最新的OS X 10.10 Yosemite自带的Sarafi版本是8.x,早已支持ES6;
  • Firefox:Mozilla自己研制的Gecko内核和JavaScript引擎OdinMonkey。早期的Firefox按版本发布,后来终于聪明地学习Chrome的做法进行自升级,时刻保持最新;
  • 移动设备上目前iOS和Android两大阵营分别主要使用Apple的Safari和Google的Chrome,由于两者都是Webkit核心,结果HTML5首先在手机上全面普及(桌面绝对是Microsoft拖了后腿),对JavaScript的标准支持也很好,最新版本均支持ES6。

这里为什么没有说到360浏览器、搜狗浏览器呢?其实这一类浏览器只是在以上列举出来的浏览器的内核基础上,换了一个包装,添加了一些个性功能而已,本质上并没有什么区别。

可以操作的BOM对象

window对象

所有浏览器都支持 window 对象。它表示浏览器窗口。

所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。

全局变量是 window 对象的属性。

全局函数是 window 对象的方法。

甚至 HTML DOM 的 document 也是 window 对象的属性之一:

window.document.getElementById("header");

与此相同:

document.getElementById("header");

window尺寸

有三种方法能够确定浏览器窗口的尺寸(浏览器的视口,不包括工具栏和滚动条)。

对于Internet Explorer、Chrome、Firefox、Opera 以及 Safari:

  • window.innerHeight - 浏览器窗口的内部高度
  • window.innerWidth - 浏览器窗口的内部宽度

对于 Internet Explorer 8、7、6、5:

  • document.documentElement.clientHeight
  • document.documentElement.clientWidth

或者

  • document.body.clientHeight
  • document.body.clientWidth

实用的 JavaScript 方案(涵盖所有浏览器):

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var w=window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;

var h=window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;

x=document.getElementById("demo");
x.innerHTML="浏览器的内部窗口宽度:" + w + ",高度:" + h + "。"
</script>

</body>
</html>

该例显示浏览器窗口的高度和宽度:(不包括工具栏/滚动条)

除此之外,还有一个outerWidthouterHeight属性,可以获取浏览器窗口的整个宽高。

其他操作window方法(不常用)

  • window.open() - 打开新窗口
  • window.close() - 关闭当前窗口
  • window.moveTo() - 移动当前窗口
  • window.resizeTo() - 调整当前窗口的尺寸

navigator

navigator对象表示浏览器的信息,最常用的属性包括:

  • navigator.appName:浏览器名称;
  • navigator.appVersion:浏览器版本;
  • navigator.language:浏览器设置的语言;
  • navigator.platform:操作系统类型;
  • navigator.userAgent:浏览器设定的User-Agent字符串。

window.navigator 对象在编写时可不使用 window 这个前缀。

示例:

<!DOCTYPE html>
<html>
<body>
<div id="example"></div>

<script>

txt = "<p>Browser CodeName: " + navigator.appCodeName + "</p>";
txt+= "<p>Browser Name: " + navigator.appName + "</p>";
txt+= "<p>Browser Version: " + navigator.appVersion + "</p>";
txt+= "<p>Cookies Enabled: " + navigator.cookieEnabled + "</p>";
txt+= "<p>Platform: " + navigator.platform + "</p>";
txt+= "<p>User-agent header: " + navigator.userAgent + "</p>";
txt+= "<p>User-agent language: " + navigator.systemLanguage + "</p>";

document.getElementById("example").innerHTML=txt;

</script>

</body>
</html>

注意

来自 navigator 对象的信息具有误导性,不应该被用于检测浏览器版本,这是因为:

  • navigator 数据可被浏览器使用者更改
  • 浏览器无法报告晚于浏览器发布的新操作系统

screen

screen对象表示屏幕的信息,常用的属性有:

  • screen.width:屏幕宽度,以像素为单位;
  • screen.availWidth:屏幕的可用宽度,以像素为单位
  • screen.height:屏幕高度,以像素为单位;
  • screen.availHeight:屏幕的可用高度,以像素为单位
  • screen.colorDepth:返回颜色位数,如8、16、24。

window.screen 对象在编写时可以不使用 window 这个前缀。

<script type="text/javascript">
document.write( "屏幕宽度:"+screen.width+"px<br />" );
document.write( "屏幕高度:"+screen.height+"px<br />" );
document.write( "屏幕可用宽度:"+screen.availWidth+"px<br />" );
document.write( "屏幕可用高度:"+screen.availHeight+"px" );
</script>

Location

location对象表示当前页面的URL信息。例如,一个完整的URL:

http://www.example.com:8080/path/index.html?a=1&b=2#TOP

可以用location.href获取:

<script>

document.write(location.href);

</script>

要获得URL各个部分的值,可以这么写:

location.protocol; // 'http'
location.host; // 'www.example.com'
location.port; // '8080'
location.pathname; // '/path/index.html'
location.search; // '?a=1&b=2'
location.hash; // 'TOP'

要加载一个新页面,可以调用location.assign()。如果要重新加载当前页面,调用location.reload()方法非常方便。

示例:加载一个新页面

<!DOCTYPE html>
<html>
<head>
<script>
function newDoc()
 {
 window.location.assign("http://www.w3school.com.cn")
 }
</script>
</head>
<body>

<input type="button" value="加载新文档" onclick="newDoc()">

</body>
</html>

History

history对象保存了浏览器的历史记录,JavaScript可以调用history对象的back()forward (),相当于用户点击了浏览器的“后退”或“前进”按钮。

History Back

history.back() 方法加载历史列表中的前一个 URL。

这与在浏览器中点击后退按钮是相同的:

<html>
<head>
<script>
function goBack()
  {
  window.history.back()
  }
</script>
</head>
<body>

<input type="button" value="Back" onclick="goBack()">

</body>
</html>

History Forward

history forward() 方法加载历史列表中的下一个 URL。

这与在浏览器中点击前进按钮是相同的:

<html>
<head>
<script>
function goForward()
  {
  window.history.forward()
  }
</script>
</head>
<body>

<input type="button" value="Forward" onclick="goForward()">

</body>
</html>

注意

这个对象属于历史遗留对象,对于现代Web页面来说,由于大量使用AJAX和页面交互,简单粗暴地调用history.back()可能会让用户感到非常愤怒。

新手开始设计Web页面时喜欢在登录页登录成功时调用history.back(),试图回到登录前的页面。这是一种错误的方法。

任何情况,你都不应该使用history这个对象了。

拓展

系统对话框

  • alert()警告框,没有返回值
  • confirm('提问的内容')返回boolean
  • prompt(),输入框,返回字符串或null

window对象常用事件

  • onload:当页面加载时
  • onscroll:当页面滚动时
  • onresize:页面重新定义大小时

相关文章

  • 转载几篇BOM的常用方法

    原生js学习笔记5——BOM操作Bom操作常用方法

  • 原生js学习笔记5——BOM操作

    什么是BOM BOM:Browser Object Model 是浏览器对象模型,浏览器对象模型提供了独立与内容的...

  • 前端发展历史

    1.js操作html 利用原生的javascript (js包括ECMAscript BOM DOM)的DOM操作...

  • 2018-07-27学习总结

    1.Bom操作(学习) 之前没有接触过bom操作的东西,现在开始学啦,虽然有点困,但是 坚持坚持就是胜利。 JS...

  • 原生js

    原生JS学习笔记1——基本数据类型和运算符 js的背景知识介绍,js的引入方式,js的变量及运算符 原生JS学习笔...

  • JavaScript基础知识总结(二)

    BOM - 浏览器对象模型 - BOM可以使我们通过js来操作浏览器 - BOM对象 window - 代表的是整...

  • JS 9-17

    JS的理解 基于事件 基于用户操作 JS的组成 Ecmscript 核心语法 Bom 使得js能够操作浏览器的办法...

  • JavaScript学习笔记(十二)-- BOM

    BOM 今天开始我们开始使用 js 去操作浏览器和页面中的 html 元素了 BOM BOM(Browser Ob...

  • iOS和html5交互开发

    iOS与HTML5交互方法总结 iOS原生APP与H5+JS交互 iOS原生App与H5页面交互笔记

  • 原生js学习笔记4——DOM操作

    什么是DOM DOM:Document Object Model,文档对象模型,把整个文档当成一个一个的节点对象。...

网友评论

    本文标题:原生js学习笔记5——BOM操作

    本文链接:https://www.haomeiwen.com/subject/okttlttx.html