zoukankan      html  css  js  c++  java
  • JavaScript中的浏览器对象模型

                                                                                                                         浏览器对象模型
    1.浏览器引入JavaScript
    1.直接在HTML文件中引入
    首先第1种方式就是直接在HTML文档里面引入JavaScript代码。在维护一些老项目的时候,经常 可以看到J avaScript代码是写在<title>标签下面的,并且通过一对<script>标签来引入代 码
    但是,如果是直接在HTML文件中引入JavaScript代码,我们一般不写在vtitle>标签下面,更 加优化的一种方式是将<sc ript>标签写在<body>标签的最小面,这样可以更快的加载出页面 效果。
    2.调用外部JS文件
    第2种方式是使用外部链接的方式来调用外部的JS文件。这种方式适用于当我们的JavaScript代 码是单独的一个js文件时,就可以采用这种方式来引入JavaScript代码。
    3使用a标记的href属性
    我们还可以在<a>标签的href属性里面书写JavaScript代码,这样会改变<a>标签默认的超链 接特性,而变为执行这段JavaScript代码,
    4事件里面直接书写JS代码
    直接将JavaScript代码写在事件里面,例如我们书写一个点击 事件,当点击button按钮时,会执行相应的J avaScript代码
    2. BOM基本介绍
    1什么是BOM
    所谓BOM,英语全称为Browser Object Model,翻译成中文为浏览器对象模型。我们的浏览 器,可以被看做是由各种各样的对象所组成
    在BOM中大致存在如下几个对象:
    •window:表示窗口对象
    •navigator:包含浏览器相关信息
    •location:包含当前页面的位置信息
    •history :包含用户访问页面的历史信息
    •screen:包含客户端显示能力信息
    •document:表示整个页面
    整个BOM的核心对象就是是window对象,它代表的是浏览器的一个实例。window对象同时也是 最顶层的对象。
    2 BOM与DOM的关系
    在下一章,我们还会介绍一个东西,被称之为DOM。很多初学者刚开始都搞不清楚BOM和DOM 之间的关系,事实上很简单,DOM可以算是BOM的一个分支。因为BOM里面存在一个叫做 Documen啲对象,但是这个对象的属性和方法太多了,所以W3C将其单独取了出来,做成了一 套规范,这个就是DOM,英语全称document object model,翻译成中文就是文档对象模型。


    需要说明一下的是BOM目前还没有相应的规范。浏览器提供商会按照各自的想法去随意扩展 它,于是浏览器之间共有的对象就成了事实上的标准。这些对象在浏览器中得以存在,很大程度 上是由于它们提供了与浏览器的互操作性。目前,W3C已经将BOM的主要方面纳入了HTML5的 规范中。
    3 .window 对象
    1 window对象基本介绍
    浏览器每打开一个窗口,就包含了一个window对象。window对 象是整个BOM的核心对象,它代表着一个浏览器窗口的实例。
    window对象扮演着在ES中的globa I对象的角色,因此所有在全局作用域中声明的变量以及函数 都会成为该对象的属性和方法。也就是说全局变量是window对象的属性,全局函数是window对 象的方法。
    通过访问window.a和window.test()也可以打印出a变量的值和调
    用test()函数。
    全局属性和window属性的区别
    var和window对象的属性真的就是一模一样么?
    也不是,还是有稍微不同的地方,那就是不能使用delete操作符删除用var声明的变量,但是如 果是window的属性就可以使用delete操作符来进行删除。
    let以及const所声明的变量
    还需要注意的是,使用ES6新提供的let和const所声明的变量不会成为window对象的属性
    2常见属性
    1.窗口大小
    关于窗口大小的属性有两组,innerWidth , innerHeight 以及 outerWidth , outerHeight 区别在于:inner那一组表示的是页面视图区的大小,而outer那一组表示的是浏览器窗口本身的 尺寸
    但是,不同的浏览器,所表示的值略微有差异。
    我们除了通过inne rWidth , inne rHeight来获取页面视图区的大小以外,还可以通 过 document.documentElement.clientWidth 以
    及document.documentElement.clientHeight来获取页面视图区的大小,
    innerWidth 返回窗口的文档显示区的宽度(IE不支持
    innerHeight 返回窗口的文档显示区的高度(IE不支持)
    document.documentElement.clientWidth 返回窗口的文档显示区的宽度(通用方法)
    document.documentElement.clientHeight 返回窗口的文档显示区的宽度(通用方法)
    2.窗口位置
    2.窗口位置的属性也是有两组,分别是scr eenLeft和scr eenTop,还有scr eenX和scr eenY
    这两组属性都是表示窗口相对于屏幕左边和上边的位置
    区别在于screenX和screen Y属性最早是火狐浏览器里面特有的属性。但是上面的代码是在谷歌浏 览器里面运行的,可以看到,现在这两组属性在很多浏览器里面都是通用的了。接下来我将上面 两组属性的区别总结成下面的表格
    screenX 返回浏览器相对于屏幕窗口的x坐标(IE不支持)
    screenY 返回浏览器相对于屏幕窗口的y坐标,即距离浏览器最顶端(IE不支持)
    screenLeft 返回浏览器相对于屏幕窗口的x坐标
    screenTop 返回浏览器相对于屏幕窗口的y坐标(在IE中这个坐标包括了工具栏+菜单栏+地址栏的高度)
    3.元素位置
    通 过offsetLeft以及offsetTop来得到一个元素在页面中的位置,位置的信息是不带单位的
    4.元素大小
    通过offsetwidth和offsetHeight来得到
    —个元素的宽高
    5.滚动位置
    通过pageXOffset和pageYOffset属性我们可以获取文档在窗口左上角水平和垂直方向滚动的像素。
    需要注意的是,pageXOffset和pageYOffset属性相等于scrollX和scrollY属性。这些属 性都是只读属性。
    3常用方法
    1.系统提示框
    alert():用于显示带有一条指定消息和一个确定按钮的警告框。
    2.窗口大小调整(有问题)
    resizeTo()和resizeBy() r esizeTo():将浏览器窗口调整到指定的值
    r esizeBy():相对于原来的浏览器窗口来进行调节
    3.窗口位置移动(不使用,不学习)
    window对象里面提供了 moveTo()和moveBy()
    4.打开和关闭窗口
    open()方法:使用window.open()方法,该方法有4个参数
    浏览器一般都是会阻止弹窗的。一般需要我们点击允许弹出后,才弹出2.htm I页 面
    在调用了 window对象的open()方法以后,他会返回一个对象,可以调用这些对象的方法,其 中就有一个close()方法,
    还有一个opener属性,保存着打开它的原始窗口对象
    5.定时函数
    间歇调用
    setInterval()与clearInterval():这两个方法可以说是一组方法,前面是设定指定的时间 周期调用某个函数,而后面的方法则是清除前面的设定
    setInterval()语法如下:
    setinterval(函数名,间隔时间)
    其中间隔时间以毫秒来计算,1000毫秒为1秒。该方法会返回一个id值,这个id值可以用于停止 重复调用。
    clearInterval()语法如下:
    clearinterval(id)
    作用是清除设置的间歇调用
    超时调用
    setTimeout()和clearTimeout():这两个也可以算是一组方法,前面是设定指定的时间周期 后调用某个函数,而后面的方法是清除前面的设定。
    setTimeout()语法如下:
    setinterval(函数名,间隔时间)
    其中间隔时间也是指代的毫秒数,但是这个毫秒数的含义是执行代码前需要等待的毫秒数。该方
    法也会返回一个 id,可用于clearTimeout
    clearTimeout()语法如下:
    clearinterval(id)
    作用是清除设置的超时调用
    4. navigator 对象
    1 navigator 对象介绍
    navigator对象包含浏览器和运行浏览器的操作系统的大量信息。例如操作系统版本,浏览器类型 和版本等信息。很多时候我们需要在判断网页所处的浏览器和平台,navigator对象为我们提供了 便利。
    2 navigator 对象属性
    appCodeName 返回浏览器的代码名
    appMinorVersion 返回浏览器的次级版本
    appName 返回浏览器名称
    appVersion 返回浏览器的平台和版本信息
    browserLanguage 返回当前浏览器的语言
    cookieEnabled 返回指明浏览器中是否启动cookie的布尔值
    cpuClass 返回浏览器系统的CPU等级
    onLine 返回指明系统是否处于脱机模式的布尔值
    platform 返回运行浏览器的操作系统平台
    systemLanguage 返回OS使用的默认的语言
    userAgent 返回由客户机发送服务器的user-agent头部的值
    userLanguage 返回OS的自然语言设置
    5. location 对象
    location对象提供了当前窗口中加载的文档的有关信息。这个对象有点特别,它既是window对象 的属性,也是document对象的属性,也就是说window.location和document.location调用 的是同一个对象
    1常见属性
    hash 返回一个URL的锚部分
    host 返回一个URL的主机名和端口
    hostname 返回URL的主机名
    href 返回完整的URL
    pathname 返回的URL路径名
    port 返回一个URL服务器使用的端口号
    protocol 返回一个URL协议
    search 返回一个URL的查询部分
    2常见方法
    assign() 载入一个新的文档
    reload() 重新载入当前文档
    replace() 用新的文档替换当前文档
    reload():该方法用于重新加载当前文档
    assign():该方法加载新的文档。
    replaced :该方法可用一个新文档取代当前文档
    那么这两个方法的区别是什么呢?
    assign()方法:加载URL指定的新的HTML文档。就相当于一个链接,跳转到指定的URL, 当前页面会转为新页面内容,可以点击后退返回上一个页面。
    replaced方法:通过加载URL指定的文档来替换当前文档,这个方法是替换当前窗口页面, 前后两个页面共用一个窗口,所以是没有后退返回上一页的。
    跳转的方式
    最后我们来总结一下页面跳转的方式,抛开<a>标签,通过JavaScript代码来实现页面的跳转大 致有下面几种方式:
    •location.href
    •window.location
    •location
    •location.assign()
    •location.replace()
    6. history 对象
    history对象用来管理当前窗口最近访问过的URL记录,这些URL记录被保存在history列表中, history对象使得脚本程序可以模拟浏览器工具栏的前进和后退按钮。
    1.常见属性
    length 返回浏览器历史列表中URL的数量
    2.常见方法
    history对象常见的方法如下表:
    方法 描述
    back。 加载history列表中的前一个URL
    forward。 加载history列表中的下一^ URL
    go。 加载history列表中的某个具体页面
    window.history.go。方法可以用来导航到指定的页面,0代表是当前页面
    还有window.history.forward()和window.history.back()方法可以分别用来向前或者回退 —个页面,就像浏览器的前进和后退按钮一样。
    7 screen 对象
    有时脚本需要获取浏览器或者显示器的一些信息,例如分辨率,有效分辨率,DPI等。这个时候 我们就可以使用scree n对象。该对象提供了一组属性,供我们来获取到这些有用的信息。
    screen对象属性如下表:
    属性 说明
    height 屏幕的像素高度
    width 屏幕的像素宽度
    availHeight 屏幕的像素高度减去系统部件高度之后的值(只读)
    availWidth 屏幕的像素宽度减去系统部件宽度之后的值(只读)
    left 当前屏幕距左边的像素距离[firefox返回0, chrome和IE不支持]
    top 当前屏幕距上方的像素距离[firefox返回0, chrome和IE不支持]
    availLeft 未被系统部件占用的最左侧的像素值(只读)[chrome和firefox返回0, I E不支持]
    availTop 未被系统部件占用的最上方的像素值(只读)[chrome和firefox返回0, I E不支持]
    bufferDepth 读、写用于呈现屏外位图的位数[IE返回0, chrome和firefox不支持]
    colorDepth 用于表现颜色的位数(只读)[IE8-返回32,其他浏览器返回24]
    pixelDepth 屏幕的位深(只读)[IE8 -不支持,其他浏览器返回24]
    deviceXDPI 屏幕实际的水平DPI(只读)[IE返回96, chrome和firefox不支持]
    deviceYDPI 屏幕实际的垂直DPI(只读)[IE返回96, chrome和firefox不支持]
    logicalXDPI 屏幕逻辑的水平DPI(只读)[IE返回96, chrome和firefox不支持]
    logicalYDPI 屏幕逻辑的垂直DPI(只读)[IE返回96, chrome和firefox不支持]
    updateInterval 读、写以毫秒表示的屏幕刷新时间间隔[IE返回0, chrome和firefox不 支持]
    fontSmoothingEnab 是否启用了字体平滑(只读)[IE返回true, chrome和firefox不支持]
    led
    8 document 对象
    在后面的DOM中,我们会专门介绍document相关的大量的方法。这里就先介绍一个即可。write()方法,用于将一串文本写入页面。如果页面已经加载了,它将完全替换当前的文 档。
    使用document.write()书写页面的时候,原来的东西会完全被替换掉。并且我们书 写了两行东西,这里两行东西是在一行里面显示的。与document.wri te()对应的有一
    个document.writeln(),这个方法就可以实现换行输出,但是这里的换行指的是代码里面会换 行,页面上仍然是显示成一行的。不过多了一个空格,因为html存在空白折叠现象。书写的新的 内容仍然会将之前的内容给替换掉。
    cookie
    1.创建 cookie
    要创建一个cookie,只需要将要保存的信息赋值给document.cookie属性即可
    2.修改 cookie
    如果要修改cookie的值也非常简单,只需要对已有的键重新赋值就可以了。
    3.读取 cookie
    读取cookie只需要键入document.cookie即可,这个前面已经用过了。我们可以使用split。方法将 cookie的字符串拆分成数组,然后使用for-of进行循环遍历
    4. cookie失效时间
    cookie默认是会话的cookie,也就是说,一旦浏览器会话完成(也就是用户关闭浏览器标签页或者 窗口时),cookie就会被删除。
    不过,cookie可以变成持久的,只需在设置cookie的时候,在cookie末尾添加';expires=日期 值'来设置失效日期即可
    5. cookie的路径和域
    默认情况下,cookie只能通过与设置它的文件在相同的目录和域中的页面来读取。这是出于安全 的原因,所以访问cookie是有限制的。
    路径可以进行修改。例如我们要让根目录中的任何页面都可以读取cookie。可以通过在设置 cookie时,在cookie的末尾添加;path=/来实现,
    除此之外,我们还可以在cookie的末尾添加;domain = domainName来设置域:
    6.保护cookie安全
    这个也非常简单,在一个cookie的末尾添加上字符串';secure '即可,这样可以确保它只能通过安 全的H TTPS网络来进行传输
    7.删除 cookie
    要删除一个cookie的方法非常简单,只需要将cookie的失效时间设置在过去的某个时间过期即可。

  • 相关阅读:
    使用控制台来启动.net core 的程序
    论钱的意义
    js 将图片转换为 base64
    CPU 的由来
    C# Cef winform 脚本的执行 踩过的坑
    什么是JSONP?
    Cookie和Session
    request
    response和ServletContext和乱码问题
    Servilet初步
  • 原文地址:https://www.cnblogs.com/zai1/p/11259531.html
Copyright © 2011-2022 走看看