当前位置: 首页 > article >正文

JavaScript高级进阶(一)

什么是BOM

BOM: Browser Object Model(浏览器对象模型) 提供了独立于内容与浏览器窗口进行交互的对象,你可以前进后退……历史记录等,是浏览器自动生成的功能。

浏览器对象模型

对象以及说明:

window: 窗口对象,可以用来控制当前窗口,打开新窗口。

screen: 屏幕对象,获取屏幕相关信息。

navigator: 浏览器对象,通过这个对象可以判定用户所使用的浏览器。

history: 历史对象,可以用来前进或后退一个页面。

location: 地址对象,可以用来获取当前url的信息。

JavaScript计时事件: 在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。

localStorage|sessionStorage: 存储对象,可以用来存储数据,和cookie相似,区别是它是为了更大容量存储设计的,在使用上更方便。

 

//在JS中,window代表着最顶层,所有东西都属于它,是顶层对象。

console.log(window);可以打印看一下:

53674a77c94346b4bcf55e5add2d4f0e.png

bcc534cabeb642cea2136129f216c4c5.png 

 非常多这里截了一部分

window对象

//新窗口打开

window.open('https://www.baidu.com','_blank');

25727af9869a4a54b2a3ce082fed36e7.png

 //当前窗口打开

window.open('https://www.baidu.com','_self');

a3f2a5600eea485eae34d0c2552778cc.png

//关闭窗口

window.close()

screen屏幕对象

获取当前屏幕的宽高,浏览器的有效宽高,屏幕的分辨率。

console.log(screen);打印一下:

9631bb3361b7468ab74bb1b79f3ce816.png

可以看到width和height是当前屏幕宽高,而availHeight与availWidth是浏览器的有效宽高,colorDepth是分辨率(在1px中能包含多少颜色块),可根据不同的宽高展示不同的对象。

nagivator浏览器对象

记录的当然是关于浏览器的信息,也可以log看一下:

d7c11ea74f5b4c9789538f0ee490d8ad.png

 

正常情况下var                            version_=navigator.userAgent.toLowerCase();

console.log(version_);

if(version_.indexOf('chrome')!=-1){

    alert('谷歌浏览器')

}else(

    alert('其他浏览器')

)

可以通过navigator.userAgent可以查看浏览器及其运行环境的信息,具体有:

1.浏览器名称和版本:标识浏览器的名称及其版本号。例如,Chrome/114.0.0.0 表示 Chrome 浏览器及其版本。

2.渲染引擎:标识浏览器使用的渲染引擎,如 WebKit、Blink、Gecko 等。

3.操作系统:标识设备的操作系统,例如 Windows、macOS、Linux、Android、iOS 等。

4.设备类型:有时会包括设备类型的信息,如手机、平板或桌面设备。

5.兼容性信息:为了确保向后兼容,userAgent 字符串可能包含不再使用的或与其他浏览器类似的标识信息。

了解就行,但在这我得到结果却是

741562e3b52d4beda1b04e99c88c4ca8.png

我没用谷歌这是为什么?

 在浏览器的 navigator.userAgent 字符串中带有 “Google” 或 “Chrome” 信息,即使你使用的并不是谷歌浏览器,可能有以下几个原因:

1.浏览器的伪装: 一些浏览器(例如Microsoft Edge、Opera、Brave等)基于Chromium内核开发,它们的 userAgent 通常包含类似Chrome的信息,以确保与网站的兼容性。开发者有时会检查 userAgent 来确定浏览器并调整网页的呈现方式,因此这些浏览器通常会伪装成Chrome浏览器,以避免潜在的兼容性问题。

2.Chromium内核: 如果你使用的是基于Chromium内核的浏览器,navigator.userAgent 字符串中会包含与Chrome类似的信息,因为它们共享相同的浏览器引擎。

3.兼容性原因: 有些网站在检测到非谷歌浏览器时可能会限制功能或显示不兼容的信息。因此,浏览器开发者通常会在 userAgent 中包含Chrome或Google相关的标识,以避免这些问题。

history对象

这个一说就明白,写这么三个html页面:

1.html:

<body>

    <h1>页面1</h1>

    <a href=" ">点击前往页面2</a >

</body>

2.html:

<body>

    <h1>页面2</h1>

    <a href=" ">点击前往页面3</a >

</body>

3.html:

<body>

    <h1>页面3</h1>

    <a href=" ">到此为止</a >

</body>

ed4e2e1205e34ab28a25790562e24d8c.png

(首先我们可以log一下history看一下:

4ea3d688948f4fb99c06082bac9c4d63.png

就这么个东西一点就前往别的页面,我们再加点东西:

<body>

    <h1>页面1</h1>

    <a href=" ">点击前往页面2</a >

    <button οnclick="go()">前往</button>

    <button οnclick="back()">后退</button>

    <script>

        // console.log(window.history);

        function go(){

            //history内有个forward(),前进一步

            window.history.forward();

        }

        function back(){

            //history内有个back(),后退一步

            window.history.back();

        }

    </script>

</body>

把history中的前进后退封装成两个函数,再绑定到按钮上:

7745f16998e043fca19e1ac73375bd05.png

 76b71a2544eb4fb291646246eaec32e4.png

 1ef5068fba37489b9980717088bdcba2.png

 此时我们点击下一页后出现历史记录,就可以用前进后退来前往下一页面,回到上一页了,还可以直接前进2步,这需要history下go这个方法:

  <script>

        function go(){

//在go方法后传参数,这里2表示前进2步

            window.history.go(2);

        }

        function back(){

//-1表示后退一步

            window.history.go(-1);

        }

    </script>

location对象

地址对象,获取当前URL的信息,获取当前页面路径。

location.href获取到页面的路径,页面从哪里来。

<script>

        console.log(location.href);

</script>

cf78ca9fc06f42e28289145ba25612d2.png

 如果看到的结果是file://,表示打开的是本地文件。

location.href不赋值是获取到页面的路径,如果是这样:location.href="http://www.baidu.com"就是重新定义去往方向。

location.reload();是刷新页面,可以封装成一个方法,绑到按钮上,当然浏览器都自带着也不太需要。

除此之外,window下还有一些别的方法,如open()打开页面,close()关闭页面等,别的就不细说了。


http://www.kler.cn/a/288557.html

相关文章:

  • 第 13 章 -Go 语言 接口
  • websocket初始化
  • 封装一个省市区的筛选组件
  • 鸿蒙学习基本概念
  • 陪诊问诊APP开发实战:基于互联网医院系统源码的搭建详解
  • 【大数据测试HBase数据库 — 详细教程(含实例与监控调优)】
  • SprinBoot+Vue停车场管理微信小程序的设计与实现
  • C# 上位机开发指南:高效学习建议
  • 力扣刷题--LCP17.速算机器人【简单】
  • ChatGPT 3.5/4新手使用手册(附:案例)
  • LabVIEW电机多次调用
  • 基于RAG多层次的多代理架构来处理时序任务
  • Vue3中 defineProps 与 defineEmits 基本使用
  • hive中datediff函数介绍
  • 二百五十九、Java——采集Kafka数据,解析成一条条数据,写入另一Kafka中(一般JSON)
  • verilog 中的for循环用法
  • 深度学习(一)-感知机+神经网络+激活函数
  • Qt 实现部件或者窗口(QWidget)透明效果和其他特殊效果
  • 深度解析TCP与UDP协议
  • 每日一题——第七十九题
  • How to install mysql 5.7 with podman in Ubuntu 24.04
  • 三十二、初识Gin框架
  • chunqiude
  • JS设计模式之“幽灵工厂” - 抽象工厂模式
  • 【贪心算法】区间类算法题(整数替换、俄罗斯套娃、重构字符串等、C++)
  • OpenAI API: Can I remove the line break from the response with a parameter?