下面介绍的都是基于同源之间 进行通信的
BroadCast Channel
缺点:
优点:
LocalStorage
window.open:获取句柄
Shared Worker
Cookie
基于服务器端推送:WebSocket
Service-Worker
具体的可以去看我在语雀记录的文章
这里就简单介绍一些重点
前端路由有两种形式,一种是history,一种是hash模式
hash
触发情况:通过window中的hashchange进行监听
浏览器的前进或者后退,他是会触发window.location.hash的变化,从而触发onhashchange的
改变浏览器url地址后面的hash值,这时候不会向服务器发送请求,但是hash值发生改变,也会触发
在浏览器中输入带有hash值的url地址,首先会先将hash前面网址的地址向服务器请求,这时候会再设置散列值,也就是hash,进而触发事件
向a链接中的锚点链接,例如<a href="#home"/>
这种的,这种会触发window.location.hash,进而触发事件
history
概述:
window.history会指向History对象,他表示的是当前窗口的浏览历史.发生改变时,只会刷新更改url地址,不会刷新页面
由于安全原因,浏览器不允许脚本读取这些地址
触发情况
通过监听popState来触发,触发的情况只有,下面三个API,他们改变了才会发生变化
可以使用History中的三个API,History.back(),History.go(),History.forward()进行一个触发
back和forward只能移动一次,分别是向后,向前
go的话.会接受数字,数字代表着移动方向
History.pushState
history.pushState(object,title,url);
第一个是你要传入的对象值
第二个参数,浏览器大部分不支持,所以传个空字符串即可
第三个参数是新的网址,要在同域下,设置了跨域网址,则会报错
如果你想要取值的话,需要调用history.state,里面存放的是你放入的对象
replaceState,用法和pushState差不多
注意事项
相同点:
不同点
iframe
会阻塞主页面的onload
事件
搜索引擎的检索程序无法解读这种页面,不利于seo
iframe
和主页面共享连接池,而浏览器对于相同域的连接有限制,所以会影响页面的并行加载
使用iframe
之前要考虑两个缺点,如果需要使用iframe
,最好是通过javaScript
动态给iframe
添加src属性,可以绕开以上两个问题
src
是用于替换当前元素,href
用于在当前文档和引用资源之间确认联系
src
是source
的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在的位置;在请求src
资源时会将其指向的资源下载并应用到文档中,如js
脚本,img
图片,iframe
等元素
<script src="js.js"></script>
当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载,编译,执行完毕,图片和框架等元素也是如此,类似于将所指向资源嵌入到当前标签内,这也是为什么js脚本放在底部和不是头部
href
是Hypertext Reference
的缩写,指向网络资源所在位置,建立和当前元素(锚点)或者当前文档(链接)之间的链接,如果我们在文档中添加
<link href=”common.css” rel=”stylesheet”/>
浏览器会识别该文档为css文件,就会并行下载资源并且不会停止对当前文档的处理
这也是为什么会建议使用link的方式来加载css,而不是使用
@import
的方式
原文:https://www.cnblogs.com/codespirit-zx/p/15264918.html