HTML面试题
01-跨标签页通信有哪几种方式
下面介绍的都是基于同源之间 进行通信的
-
BroadCast Channel
缺点:
- 他的兼容性稍微差点
优点:
- 与localStorage方案生命周期短(不持久化),相对干净点
-
LocalStorage
- API简单直观,兼容性好,除了跨域场景下需要配合其他方案,无其他缺点
-
window.open:获取句柄
-
Shared Worker
- 相较于其他方案没有优势,此外,API复杂而且调试不方便。
-
Cookie
- 相较于其他方案没有存在优势的地方,只能同域使用,而且污染cookie以后还额外增加AJAX的请求头内容。
-
基于服务器端推送:WebSocket
-
Service-Worker
02-块级元素和行内元素
具体的可以去看我在语雀记录的文章
这里就简单介绍一些重点
- 行内元素无法设置margin和padding的上下值,只能设置左右的值
- p标签内不能嵌套块级元素
03-前端路由
前端路由有两种形式,一种是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差不多
-
注意事项
- 页面刚加载的时候,不会触发popState
- 如果后端没有准备好的话,强制刷新会导致错误
-
04-async和defer的区别
- async : 在脚本上加上async后,这个脚本会变成异步执行,但是执行顺序不能得到保证
- defer: 在脚本上加上defer后,这个脚本就会延迟执行,但是执行顺序能得到保证
相同点:
- 加载文件时不阻塞页面渲染
- 对于inline的script无效,当script标签中间有代码时,两个属性都不会起作用
- 使用这两个属性的脚本中不能调用document.write方法
- 有脚本的onload的事件回调
不同点
- 在HTML4.0中定义了defer,html5.0中定义了async
- 每一个async属性的脚本都在它下载结束之后立即执行,同时会在window的load事件之前执行,所以可能出现顺序被打乱的情况
- defer的话再页面解析完毕之后,按照原本的顺序执行
- 当一个script标签内同时包含defer与async属性时,只会触发async,不会触发defer,除非浏览器不支持async
05-iframe有什么缺点
-
iframe
会阻塞主页面的onload
事件 -
搜索引擎的检索程序无法解读这种页面,不利于
seo
-
iframe
和主页面共享连接池,而浏览器对于相同域的连接有限制,所以会影响页面的并行加载 -
使用
iframe
之前要考虑两个缺点,如果需要使用iframe
,最好是通过javaScript
-
动态给
iframe
添加src属性,可以绕开以上两个问题
06-Src和href的区别
-
src
是用于替换当前元素,href
用于在当前文档和引用资源之间确认联系 -
src
是source
的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在的位置;在请求src
资源时会将其指向的资源下载并应用到文档中,如js
脚本,img
图片,iframe
等元素<script src="http://www.bubuko.com/js.js"></script>
当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载,编译,执行完毕,图片和框架等元素也是如此,类似于将所指向资源嵌入到当前标签内,这也是为什么js脚本放在底部和不是头部
-
href
是Hypertext Reference
的缩写,指向网络资源所在位置,建立和当前元素(锚点)或者当前文档(链接)之间的链接,如果我们在文档中添加<link href=”common.css” rel=”stylesheet”/>
浏览器会识别该文档为css文件,就会并行下载资源并且不会停止对当前文档的处理
这也是为什么会建议使用link的方式来加载css,而不是使用
@import
的方式
HTML面试题
原文:https://www.cnblogs.com/codespirit-zx/p/15264918.html