BOM五大对象

01-BOM浏览器对象模型

1.1-BOM与DOM介绍

  • JavaScript语言由三部分组成

    • ECMAJavaScript:定义了js的语法规范

  • Dom:document object model文档对象模型:一个HTML文档中所有的一切都是dom对象

    • Dom定义了一套操作HTML文档的API(节点的增删改查)

  • Bom:Brower object model浏览器对象模型 例如:一个浏览器的窗口就是一个window对象

    • Bom定义了一套操作浏览器窗口的API

  • Bom主要由五大对象组成:

    • window:浏览器核心对象

    • location:包含当前页面的URL信息

    • history:history对象主要用于记录你当前窗口的历史记录

    • navigator:包含当前浏览器的信息,例如用的什么浏览器,操作系统版本等

    • screen:获取用户电脑的屏幕分辨率

      • 这个一般不用,因为对开发者没啥作用

BOM五大对象

1.2-window对象

  • 1.window对象:指的是当前浏览器窗口,它是JS中的*对象

    • (1).所有的全局变量都是window对象的属性:最*的对象

      • document对象

      • bom对象

      • 全局的方法:alert(),setInterval()...........

    • (2).只要是window的属性和方法,在使用的时候都可以省略window

      • 例如:window.alert() 可以省略window写成alert()

      • 例如:window.document 可以省略window写成document

    • (3).window对象有一个特殊属性叫做name

      • 它永远都是一个字符串,无论给他赋什么值

  • 2.window对象有两个常用的方法:open()与close()

    • open():打开一个窗口

    • close():关闭一个窗口

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Title</title>
      </head>
      <body>
      
      <input type="button" value="点我打开一个新窗口" id="open">
      <input type="button" value="点我有惊喜" id="close">
      
      </body>
      
      <script>
          /*1.window对象:指的是当前浏览器窗口,它是JS中的*对象
              * (1).所有的全局变量都是window对象的属性:最*的对象
                  * document对象
                  * bom对象
                  * 全局的方法:alert(),setInterval()...........
               * (2).只要是window的属性和方法,在使用的时候都可以省略window
                  * 例如:window.alert()  可以省略window写成alert()
                  * 例如:window.document 可以省略window写成document
               * (3).window对象有一个特殊属性叫做name
                  * 它永远都是一个字符串,无论给他赋什么值
                  *
             2.window对象有两个常用的方法:open()与close()
                  * open():打开一个窗口
                  * close():关闭一个窗口
      
           */
      
          //1.window是*对象,所有的全局变量都是window对象的属性
          let age = 18;
          console.log ( window.age );
      
          //2.只要是window对象的属性和方法,window可以省略
          console.log ( window.document === document );true
      
          //3.window有一个特殊的属性叫做name,它永远都是一个字符串
          console.log ( window.name );//默认是一个空字符串
          window.name = 123456;
          console.log ( name );//永远都是一个字符串
          //就算你重新声明一个变量叫做name,也无法覆盖它
          let name = [123];
          console.log ( name );
      
          //打开新窗口
          document.getElementById('open').onclick = function (  ) {
              /**
              * @param 第一个参数:URL  要打开的窗口网址
               * @param 第二个参数:类似于a标签的target属性,是替换当前窗口还是新开一个窗口
               * @param 第三个参数:新窗口特征:大小和位置等(新窗口才有效_blank)
               * @param 第四个参数:布尔类型  true/false:把新开的窗口加入/不加入到浏览器历史记录
               * @return 新打开的window对象
              */
             let newWindow = window.open('https://www.baidu.com', '_blank', 'top=100,left=100,width=500,height=300', true );
          }
      
          //关闭窗口
          document.getElementById('close').onclick = function (  ) {
              //参数就是你想要关闭的窗口对象,如果不写,默认就是关闭自己
              //1.这样写如果关闭的是*窗口谷歌和火狐会失效,如果失效可以使用下面这种写法
              //window.close( );
      
              /*2.谷歌火狐为了安全起见会拦截我们的代码,js代码只能关闭用js代码打开的界面,
              所以我们用js先假装在当前窗口打开自己,然后再关闭自己*/
              //这里的url不是空字符串"",而是一个空格字符串  " "
              window.open(" ","_self").close();
          }
      </script>
      </html>

      1.3-window对象三个事件

      window对象有三个事件,记录了浏览器窗口从打开到关闭的三个过程

    • 1.window.onload:界面上所有的内容加载完毕之后才触发这个事件

    • 2.window.onbeforeunload:界面在关闭之前会触发这个事件

    • 3.window.onunload:界面在关闭的那一瞬间会触发这个事件

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Title</title>
      </head>
      
      <script>
          /*window对象有三个事件,记录了浏览器窗口从打开到关闭的三个过程
      
          1.window.onload:界面上所有的内容加载完毕之后才触发这个事件
      
          2.window.onbeforeunload:界面在关闭之前会触发这个事件
      
              3.window.onunload:界面在关闭的那一瞬间会触发这个事件
      
           */
      
          //由于我们script标签写在了body标签的上面,这行代码会在body内容还未加载的时候就执行
          console.log ( document.getElementById ( "p1" ) );//null  此时编译器还未解析p标签
      
          //1.window.onload:界面上所有内容加载完毕后会触发
          window.onload = function ( ) {
      
              // 由于编译器是从上往下解析html文件的,如果我们的js代码写在body前面,就有可能无法获取dom对象
              console.log ( "当前界面全部加载完毕" );
              //window.onload无论写在界面什么位置都是等整个界面加载完毕之后才会执行
              console.log ( document.getElementById ( "p1" ) );
          }
      
          //2.window.onbeforeunload:界面在关闭前触发
          window.onbeforeunload = function (  ) {
              /*  1.这个方法主要用于在界面关闭之前保存一些重要数据
              *  2.也可以弹出一个提示框挽留一下用户
              * */
      
              //return 内容:浏览器会自动弹出一个挽留窗口
              //谷歌和火狐都会拦截这种恶心事,只有IE支持
              return '你真的要狠心抛弃我吗';
          }
      
          //3 window.onunload:界面关闭时触发
          window.onunload = function (  ) {
      
              console.log('界面正在关闭');
      
          }
      </script>
      
      <body>
      
      <p id="p1">我是p标签</p>
      </body>
      
      
      </html>

      1.4-location对象

    • 1.location对象:包含当前页面的URL信息

      • location.href:全球统一资源定位符

      • location.href = 协议名(http) + ip地址(域名) + 端口号 + 资源路径

      • 暂时只需要知道location对象包含一个网页的网络url信息即可,具体的含义将在后面阶段学习网络的时候详细讲解

    • 2.location对象有三个常用的方法

      • (1)打开新网页:location.assign('你要打开的新网页的url')

      • (2)替换当前网页:location.replace('要替换的网页url')

      • (3) 刷新当前网页: location.reload()

        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
        </head>
        <body>
        
        <input type="button" id="assign" value="assign打开新网页">
        <br>
        <input type="button" id="replace" value="replace替换当前网页">
        <br>
        <input type="button" id="reload" value="reload刷新当前网页">
        <br>
        
        </body>
        
        <script>
            /*1.location对象:包含当前页面的URL信息
                * url:全球统一资源定位符
                * url = 协议名(http) + ip地址(域名) + 端口号 + 资源路径
                * 暂时只需要知道location对象包含一个网页的网络url信息即可,具体的含义将在后面阶段学习网络的时候详细讲解
        
              2.location对象有三个常用的方法
                    * (1)打开新网页:location.assign('你要打开的新网页的url')
                    * (2)替换当前网页:location.replace('要替换的网页url')
                    *   (3)  刷新当前网页: location.reload()
             */
        
            //1.location对象信息查看
            console.log ( window.location );//location对象
            console.log(location.hash);//资源定位符(锚点定位)
            console.log(location.host);//主机   host = hostname + port
            console.log(location.hostname);//主机名(ip地址)
            console.log(location.port);//端口号
            console.log(location.href);//完整的url路径
            console.log(location.pathname);//资源路径
            console.log(location.protocol);//url的协议
            console.log(location.search);//url请求的参数
        
            //2.assign:打开新网页
            document.getElementById('assign').onclick = function (  ) {
                //会留下历史记录(可以回退)
                window.location.assign('http://www.itheima.com');
                //上面这行代码等价于下面这行代码
                //window.location.href = 'http://www.itheima.com';
            }
        
            //3.replace:替换当前网页
            document.getElementById('replace').onclick = function (  ) {
                //不会留下历史记录(不能回退)
                window.location.replace('http://www.itcast.com');
            }
        
            //4.刷新当前网页
            document.getElementById('reload').onclick = function (  ) {
                //相当于按了F5刷新当前网页
                window.location.reload();
            }
        
        </script>
        </html>

        1.5-history对象

        history对象主要用于记录你当前窗口的历史记录

      • 主要作用就是前进和后退网页(相当于浏览器的左上角前进后退按钮功能)

      • history.forward():前进

      • history.back():后退

      • 跳转指定页数: history.go( 数字 )    :正数:前进几页   1:前进下一页 , 负数:回退几页 -1:返回上一页
      • <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
        </head>
        <body>
        <a href="09-history测试页.html">点我跳转</a>
        <input type="button" value="前进" id="forword">
        </body>
        
        <script>
            /*history对象主要用于记录你当前窗口的历史记录
                * 主要作用就是前进和后退网页(相当于浏览器的左上角前进后退按钮功能)
                * history.forward():前进
                * history.back():后退
             */
        
            document.getElementById('forword').onclick = function (  ) {
                //跳转到当前网页历史记录的下一页,如果没有下一页的历史记录,则不跳转
                history.forward();
            }
        </script>
        </html>

        1.6-navigator对象

        navigator对象:包含当前浏览器的信息

      • 工作中应用场景:用户信息统计(统计我这个网站平台的用户群体分布,什么浏览器,windows什么版本等)

        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
        </head>
        <body>
        
        </body>
        
        <script>
            /*navigator对象:包含当前浏览器的信息
                工作中应用场景:用户信息统计(统计我这个网站平台的用户群体分布,什么浏览器,windows什么版本等)
        
             */
        
            console.log ( navigator );//navigator对象
            console.log ( navigator.appVersion );//当前浏览器版本信息
            console.log ( navigator.platform );//当前浏览器的硬件平台
            console.log ( navigator.userAgent );//当前浏览器信息
        
            //使用场景1:判断当前用户的操作系统是32位还是64位
            //谷歌和IE  64位显示WOW64    火狐显示Win64
            if(navigator.userAgent.indexOf('WOW64') != -1 || navigator.userAgent.indexOf('Win64') != -1){
                console.log ( "64位" );
            }else{
                console.log ( "32位" );
            }
        
            //使用场景2:判断用户当前使用哪种浏览器
            if(navigator.userAgent.indexOf('Chrome') != -1){
                console.log ( "谷歌浏览器" );
            }else if(navigator.userAgent.indexOf('Firefox') != -1){
                console.log ( "火狐浏览器" );
            }else{
                console.log ( "IE浏览器" );//也有可能是其他小众浏览器,可以忽略不计
            }
        
        </script>
        </html>

        ==02-localstorage与sessionstorage==

      • localStorage:本地存储
        • 将数据存储到浏览器
      • 语法
        • 存:localStorage.setItem('属性名',属性值)
        • 取:localStorage.getItem('属性名')         有返回值

          删: localStorage.removeItem('属性名')

          清空: localStorage.clear()

          3.注意点

          a.存储的数据只能是字符串类型。如果是其他数据类型则会自动调用toString()方法转成字符串

          b.永久存储。除非自己删,否则一直存在于浏览器

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <meta http-equiv="X-UA-Compatible" content="ie=edge">
              <title>Document</title>
          </head>
          <body>
              <button id="btn1">存储据</button>
              <button id="btn2">取储据</button>
              <button id="btn3">删储据</button>
              <button id="btn4">清空储据</button>
          
              <script>
                  /* 
                      1.localStorage:本地存储
                          将数据存储到浏览器
          
                      2.语法
                          存:  localStorage.setItem('属性名','属性值')
                          取:  localStorage.getItem('属性名')
                          删:  localStorage.removeItem('属性名')
                          清空: localStorage.clear()
          
                      3.注意点
                          a.存储的数据只能是字符串类型。如果是其他数据类型则会自动调用toString()方法转成字符串
                          b.永久存储。除非自己删,否则一直存在于浏览器
                   */
          
          
                  //存
                  document.getElementById('btn1').onclick = function(){
                      localStorage.setItem('name','班长');
                      localStorage.setItem('age',18);
                      localStorage.setItem('girlFriend',['苍老师','波多老师','吉泽老师']);
                  }
          
                  //取
                  document.getElementById('btn2').onclick = function(){
                      let age = localStorage.getItem('age');
                      console.log(age); 
                  }
          
                  //删
                  document.getElementById('btn3').onclick = function(){
                      localStorage.removeItem('girlFriend'); 
                  }
          
                  //清空:一次性删除所有数据
                  document.getElementById('btn4').onclick = function(){
                      localStorage.clear(); 
                  }
              </script>
          </body>
          </html>

          1.2-sessionStorage

          1.sessionStorage相当于短命版的localStorage,其他用法完全一致

          2.两者区别:HP值不同

          localStorage:永久存储(存在硬盘,HP值无限)

          sessionStorage:临时存储(存在内存,HP值一条命,只要浏览器关闭就没有了)

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <meta http-equiv="X-UA-Compatible" content="ie=edge">
              <title>Document</title>
          </head>
          <body>
              <button id="btn1">存储据</button>
              <button id="btn2">取储据</button>
              <button id="btn3">删储据</button>
              <button id="btn4">清空储据</button>
          
              <script>
                  /* 
                      1.sessionStorage相当于短命版的localStorage,其他用法完全一致
          
                      2.两者区别:HP值不同
                          localStorage:永久存储(存在硬盘,HP值无限)
                          sessionStorage:临时存储(存在内存,HP值一条命,只要浏览器关闭就没有了)
          
                   */
          
          
                  //存
                  document.getElementById('btn1').onclick = function(){
                      sessionStorage.setItem('name','班长');
                      sessionStorage.setItem('age',18);
                      sessionStorage.setItem('girlFriend',['苍老师','波多老师','吉泽老师']);
                  }
          
                  //取
                  document.getElementById('btn2').onclick = function(){
                      let age = sessionStorage.getItem('age');
                      console.log(age); 
                  }
          
                  //删
                  document.getElementById('btn3').onclick = function(){
                      sessionStorage.removeItem('girlFriend'); 
                  }
          
                  //清空:一次性删除所有数据
                  document.getElementById('btn4').onclick = function(){
                      sessionStorage.clear(); 
                  }
              </script>
          </body>
          </html>

1.3-案例:页面间传值

页面A

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input class="name" type="text" placeholder="请输入用户名"><br>
    <input class="password" type="text" placeholder="密码"> <br>
    <button class="btn">下一步</button>
    <script>
        // 获取按钮
        document.querySelector('.btn').onclick = function () {
            // 获取用户输入的数据存到内存中   获取用户输入数据
            let name = document.querySelector('.name').value
            let password = document.querySelector('.password').value
            
            // 将数据临时存到内存中
            sessionStorage.setItem('name', name)
            sessionStorage.setItem('password', password)
            // 跳转B页面
            location.href = './页面传值B.html'
        }
    </script>
</body>

</html>

页面B

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <input class="email" type="text" placeholder="请输入邮箱"><br>
    <input class="phone" type="text" placeholder="请输入电话"><br>
    <button class="btn">注册</button>
    <script>
        // 获取按钮
        document.querySelector('.btn').onclick = function () {
            // 获取用户输入的数据 和A页面的数据
            let email = document.querySelector('.email').value
            let phone = document.querySelector('.phone').value

            // 获取内存中的用户所输入的数据                 
            let name = sessionStorage.getItem('name')
            let password = sessionStorage.getItem('password')

            // 在控制台打印输入数据
            console.log(name, password, email, phone);
        }
    </script>
</body>

</html>

03-localStorage如何存储对象类型数据

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <button class="btn">存数据</button>
    <button class="btn1">取数据</button>
    <script>
        let obj = {
            name: '陈爽',
            age: '19'
        }
        // 获取页面的元素
        document.querySelector('.btn').onclick = function () {
            // 将js对象的数据临时存到内存总
            // 将数据转为json格式
            let json = JSON.stringify(obj)
            // 将转换的数据存到内存中
            sessionStorage.setItem('name', json)
        }

        document.querySelector('.btn1').onclick = function () {
            // 取到内存中用户存到的数据
            let index = sessionStorage.getItem('name')
            // 先将用户的json数据转为js的格式
            let obj = JSON.parse(index)
            console.log(obj);
        }

    </script>
</body>

</html>

 案例:后台管理系统

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        body {
            background-color: cyan;
        }

        .login_form_con {
            position: absolute;
            left: 50%;
            top: 50%;
            margin-left: -200px;
            margin-top: -155px;
            width: 400px;
            height: 310px;
            background-color: #edeff0;
            text-align: center;
        }

        .login_title {
            height: 50px;
            font-size: 30px;

        }

        input {
            width: 80%;
            height: 50px;
            ;
            display: block;
            margin: 20px auto;
        }
    </style>
</head>

<body>
    <div class="login_form_con">
        <div class="login_title">后台管理系统</div>
        <div class="login_form">
            <input type="text" class="input_txt" placeholder="邮箱/手机号">
            <input type="password" class="input_pass" placeholder="密码">
            <input type="submit" class="input_sub" value="登 录">
        </div>
    </div>
    <script>
        /*
        1.分析需求(交互):
            点击登录按钮 : (1)判断用户名密码长度  :  全部大于6 登录成功
                           (2)如果登录成功
                                (2.1)将用户名和密码写入本地存储,下一次登录时直接显示用户名和密码
                                (2.2)跳转网页 http://www.itheima.com

                
        2.思路分析(事件三要素)
            获取元素:事件源:
            注册事件:事件类型
            事件处理:
        */

        // 获取页面交互元素
        let input_txt = document.querySelector('.input_txt') //邮箱
        let input_pass = document.querySelector('.input_pass')  // 密码
        let input_sub = document.querySelector('.input_sub') //登录按钮

        // 给按钮注册点击事件
        input_sub.onclick = function () {
            // 非空判断
            if (input_txt.value.length <= 6 || input_pass.value.length <= 6) {
                alert('登录失败')
            } else {
                // 将用户输入的用户名和密码存到硬盘当中
                localStorage.setItem('name', input_txt.value)
                localStorage.setItem('username', input_pass.value)
                alert('登录成功')
                // 用户登录成功  然后跳转页面
                location.href = 'http://www.itheima.com'
            }
        }
        // 用户重新登录页面的时候账号密码也存在
        // 取到的数直接存到用户名和密码上
        input_txt.value = localStorage.getItem('name')
        input_pass.value = localStorage.getItem('username')



    </script>
</body>

</html>

上一篇:selenium网页自动登录、打卡(三)


下一篇:高程读后感(四)— 关于BOM本人容易忽略的知识点总结