浏览器相关

目录

什么是浏览器对象模型

window对象

窗口位置

窗口大小

定时器

Location对象

History对象

详解浏览器事件捕获、冒泡

addEventListener第三个参数的

阻止事件传播

阻止默认行为

兼容性

事件委托        

ajax 以及 fetch API详解

常见的浏览器请求/响应头/错误吗解析

Request Header

response header

status


什么是浏览器对象模型

        BOM:Browser Object Model(浏览器对象模型),浏览器模型提供了独立于内容的、可以与浏览器窗口进行滑动的对象结构,就是浏览器提供的API。

其主要对象有:

  1. window对象 —— BOM的核心,是js访问浏览器的接口,也是ES规定的Global对象
  2. local对象:提供当前窗口中的加载的文档有关的信息和一些导航功能。既是window对象属性,也是document的对象属性
  3. navigation对象:夺取浏览器的系统信息
  4. screen对象:用来表示浏览器窗口外部的显示器的信息等
  5. history对象:保护用户上网的历史信息

window对象

        window对象是整个浏览器对象模型的核心,其扮演着既是接口又是全局的角色。

属性        说明
alert()系统警告对话框,接收字符串参数并显示
confirm()系统确认对话框,可提示确认或者取消两种事件
prompt()提示对话框,可对用户展示确认、取消事件外,可提供文本域
open()可导航至特定的url,又可打开一个新的浏览器窗口
window.open(url, 窗口目标, 一个特定字符串, 一个新页面是否取代浏览器历史记录中当前加载页面的布尔值)
onerror()事件处理程序,当未捕获的一场传播到调用栈上时就会调用他,并把错误消息输出到浏览器的JavaScript控制上。
window.onerror(描述错误的消息, 字符串--存放引发错误的JavaScript代码所在的文档url, 文档中发生错误的行数)
 
setTimeout()超时调用——在指定的时间过后执行代码
window.setTimeout(function(){...}, 毫秒)
setInterval()

间歇调用——每个指定的时间就执行一次

window.setInterval(function(){...}, 毫秒)

窗口位置

属性        说明兼容性
screenLeft窗口相对于屏幕左边的位置适用于IE、Safari、Chrome
screenTop窗口相对于屏幕上边的位置适用于IE、Safari、Chrome
screenX窗口相对于屏幕左边的位置适用于Firefox
screenY窗口相对于屏幕上边的位置适用于Firefox
moveBy(x, y)接收的是在水平和垂直方向上移动的像素数全兼容
moveTo(x, y)接收的是新位置的x和y的坐标值全兼容

窗口大小

属性说明
innerWidth
innerHeight

IE9+、Safari、Firefox、Opera: 该容器中页面视图区域的大小

Chrome: 返回视口大小

移动设备: 返回可见视口(即屏幕上可见页面区域的大小)

移动IE浏览器: 不支持该属性,当移动IE浏览器将布局视口的信息保存至
document.body.clientWidth 与 
document.body.clientHeight 中

outerWidth

outerHeight

IE9+、Safari、Firefox: 返回浏览器窗口本身的尺寸

Opera: 返回页面视图容器的大小

Chrome: 返回视口大小

resizeTo(width, height)

接收浏览器窗口的新宽度与新高度

resizeBy(width, height)接收新窗口与原窗口的宽度与高度之差

定时器

  • setTimeout()
  • serubterval()

问题:如何用 setTimeout 实现 setInterval?

答:使用递归,伪代码简单实现一下,要根据具体使用场景写的严谨一点。

const run = setTimeout(() => {
    run();
}, 1000)

这种方式和 setInterval 还是有区别的
区别:setTimeout 在调用run() 的时候 强制等待了,只有等待上一次 run 执行完成后,在它的回调里面执行下一次。而 setInterval 严格意义上,并不会等待上次执行,无论上次执行是否完成,到1秒后,还是会继续执行下一次。

所以:我们在做一些轮巡或者倒计时的时候建议使用 setTimeout,因为我这做这些事情的时候,我们更希望得到一个结果后,在执行下一次。
比如: 我们进行http 请求,返回一个状态 status:pending || end,我们更期望请求到一个end的状态去拿某一些信息,而如果是pending的时候我们不去做任何改变,继续执行下一次的轮巡,如果使用setInterval 就会浪费请求。

const run = setTimeout(() => {
    run();
    if(status === 'end') {
        clearTimeout(this.run)
    }
}, 1000)

Location对象

        提供当前窗口中的加载的文档有关的信息和一些导航功能。既是window对象属性,也是document的对象属性。

        location对象的主要属性: 

属性名例子说明
hash#host返回url中的hash(#后字符>=0)
hostblog.csdn.net:80服务器名称+端口(如果有)
hostnameblog.csdn.net只含服务器名称
hrefhttps://blog.csdn.net/lyh0902/article/details/123047485当前加载页面完整的url
originhttps://blog.csdn.net包含页面来源的域名的标准形式
pathname/lyh0902/article/details/123047485返回url的目录和(或)文件名
port8080url的端口号,如果不存在则返回空
portocalhttps:  or  http:页面使用的协议,最后有一个" : "
search

?name=aha&age=20

返回url的查询字符串,以问号开头

        naviagtion接口表示拥护代理的状态和标识,允许脚本查询它和注册自己的一些活动。

History对象

        history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起,history对象是用窗口的浏览历史用文档和文档状态列表的形式表示。

属性说明
go()

1、以在用户的历史记录中任意跳转,go(n) 表示前进n页,go(-n)表示后退n页(n>0)

2、go()可以传递字符串参数,浏览器历史中如果有这条url 则实现跳转至包含该字符串的第一个位置,否则什么也不做

back()后退一页.   back() === go(-1)
forword()前进一页.   forword() === go(1)
length保存历史记录的数量,可用于检测当前页面是否是用户历史记录的第一页(history.length === 0)

详解浏览器事件捕获、冒泡

        浏览器事件模型中的过程主要分为三个阶段:捕获阶段、目标阶段、冒泡阶段。

想了解更加详细内容请点击:详解浏览器事件捕获、冒泡-CSDN博客

addEventListener第三个参数的

        这里要注意addEventListenet的第三个参数,如果为true,就是代表在捕获阶段执行,如果是false,就是在冒泡阶段执行。

阻止事件传播

  • e.stopPropagation()
    大家常听到的可能是阻止冒泡,实际上这个方法不只能阻止冒泡,还能阻止捕获阶段的传播。
  • stopImmediatePropagation()
    如果有多个相同类型事件的事件监听函数绑定到同一个元素,当该类型的事件触发时,它们会按照被添加的顺序执行。
    如果其中某个监听函数执行了 event.stopImmediatePropagation() 方法,则当前元素剩下的监听函数将不会被执行。

阻止默认行为

e.preventDefault()

        e.preventDefault() 可以阻止事件的默认行为发生,默认行为是指:点击a标签就是跳转到其他页面、拖拽一个图片到浏览器会被自动打开、点击表单的提交按钮会提交表单等等,因为有时候我们并不希望发生这些事情,所以需要阻止默认行为。

兼容性

        attachEvent —— 兼容:IE7、IE8;不支持第三个参数来控制在哪个阶段发生,默认是绑定在冒泡阶段。

        addEventListener —— 兼容: firefox、chrome、IE、safari、opera;

事件委托        
详解浏览器事件捕获、冒泡-CSDN博客

ajax 以及 fetch API详解

  1. XMLHTTPRequest
  2. fetch
  • 默认不带cookie
  • 错误不会reject
  • 不支持超时设置
  • 需要借用AbortController中止fetch

常见的浏览器请求/响应头/错误吗解析

Request Header

  • :method:    GET
  • :path:
  • :scheme:    https
  • accept:    application/json, text/plain, */*
  • accept-encoding:    gzip, deflate, br
  • cache-control:    no-cache
  • cookie:    deviceId=c12;
  • origin:
  • referer:
  • user-agent:    Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1

response header

  • access-control-allow-credentials:    true
  • access-control-allow-origin:
  • content-encoding:    gzip
  • content-type:    application/json;charset=UTF-8
  • date:    Thu, 06 Aug 2020 08:15:05 GMT
  • set-cookie:    sess=QvrAQ0Cq+EcDQQPTer2X;
  • status:    200

status

  • 200 get 成功
  • 201 post 成功
  • 301 永久重定向
  • 302 临时重定向
  • 304 协商缓存 服务器文件未修改
  • 400 客户端请求有语法错误,不能被服务器识别
  • 403 服务器受到请求,但是拒绝提供服务,可能是跨域
  • 404 请求的资源不存在
  • 405 请求的method不允许
  • 500 服务器发生不可预期的错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清梦-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值