HTML基础知识
html从服务器到浏览器显示过程
- DNS解析获取IP地址
- TCP3次握手
- HTTP获取HTML文件
- 浏览器渲染HTML:
- 从<html>开始生成DOM节点树
- 如果之间需要请求css、JavaScript文件,发送请求
- 获得css文件、<style>之后开始解析CSSOM
- Javascript获得文件后就会执行代码,并阻塞DOM/CSSOM生成
- 使用DOM和CSSOM来构建渲染树,其包含了所有可见的DOM节点及其对应的样式信息
- 布局:确定每个元素在页面上的位置
- 绘制:将元素渲染到屏幕上
- 断开TCP
参考链接
css渲染过程
- 父元素先渲染,然后是子元素
- 每个元素上的所有css属性都必须有值,确定值:
- 样式声明(样式表:自定义/浏览器默认)
- 样式表冲突后,就计算层叠:
比较重要性(自定义>浏览器默认)
比较选择器权重值(自定义的还冲突) 后来者居上(权重相同情况下) - 继承,注意有些属性是无法继承的,如background-color
- 赋予默认值
参考链接
跨域问题
1. 不同源
协议、地址、端口号有一个不同,就是不同源
2. 起因
以为js脚本可以发送请求获得数据,这就涉及到隐私问题,如果不加以限制,则可能被非法脚本获得重要数据进行非法操作,比如银行转账等操作。
3. 解释
跨域就是js脚本请求了不同源的资源,服务器会返回,但是浏览器识别出跨域后将消息进行拦截,并报错
4. CORS
用于解决跨域请求,服务器在浏览器的配合下,决定自己资源的走向,即能否被不同域的网页加载
href与src区别
- src:引用资源,替换当前元素。如image,script,iframe
- href:超文本引用,指向其他资源。如link,a
<script>元素
作用
用于将JavaScript插入html中,两种插入方式
1. 直接在元素内部写js
<script>
function sum(a,b){
return a+b;
}
</script>
2. 外部引入
属性src指向js文件地址,可以是跨域请求
<script src='http://local:5000/demo.js'></script>
3. 动态加载
通过js添加元素script,并设置属性src,注意此默认设置了async
let element = document.createElement('script');
element.src = 'demo.js';
element.async = false;//动态加载默认位true,显式修改位false
document.head.appendChild(element);
属性
- src:要执行的外部文件,可以跨域
- type:脚本语言内容类型(MIME类型),text/javascript(默认)、module(此类型才可以使用import来引入模块)、text/plain(指定脚本不被执行)
- async
立即下载资源,延迟执行,但是不确定执行时机,且如果有多个script配置async,执行时没有顺序的 - defer
立即下载,延迟脚本到html解析完成后(碰见</html>)执行,只对外部脚本有用,多个script配置defer后,按照出现顺序进行执行 - crossorigin:anonymous(默认,也可以写'')/use-credentials
配置CORS,<script>本身就能跨域,但是跨域脚本执行时报错后默认只会抛出错误script Error,而不会给出详细错误,如果配置use-credentials时,就能抛出详细错误到window.error中,当然代价就是服务器response头部必须包含'Access-Control-Allow-Credentials' = true - intergrity:验证子资源内容完整性