💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
#### 同源与跨域 跨域请求是可以发出去的,服务器也能接收并返回结果,只是请求响应response被浏览器阻止了。 由于同源策略,跨域的AJAX是不会带上cookie的,如果想带,设置withCredential=true,并要求后台设置白名单。 防止CSRF的方法就是将token携带到请求参数中。 后台设置Accsee-Control-Allow-Origin允许哪些网站跨域。 JSONP的原理: ``` function getResult(data) { document.write(data); } <script src="跨域的网站请求路径?callback=getResult"></script> //后台 response.writeHead(200, {"Content-Type": "text/javascript"}); response.send(callback+"('"+123+"')"); ``` JSONP需要将回调写在url中,因此只能支持get请求。 跨域的另一中常用方案是让你的后台做为中转层,它去请求跨域网站再返给你。服务器和服务器之间是不存在跨域一说的。 #### 上传base64图片 ``` //b64toBlob的实现请参考书p308页 let blob = b64toBlob(base64, "image/png"); formData.append("fileName", blob); ``` ####垂直居中 想要垂直居中一个比div小的图片,可以: ``` .father { text-align: center; } .father:before { content: ''; vertical-align: middle; line-height=father.height; } //或者 .father:before { content: ''; display: inline-block; vertical-align: middle; height: 100%; } ``` #### 左右固定宽度,中间自适应的三栏布局 ``` <div style="width:100px; float: left">我是左侧</div> <div style="width:100px; float: right">我是右侧</div> <div>我是中间</div> ``` ``` //td会自适应沾满tr的剩余空间,但其默认宽度是内容宽,因此设置一个很大的宽度,放心,再怎么大最终都不会超过table并溢出的。 <div style="width:100px; float: left">我是左侧</div> <div style="width:100px; float: right">我是右侧</div> <div style="disply: table-cell; width: 99999px;">我是中间</div> ``` ``` <div style="display: flex"> <div style="width:100px;">我是左侧</div> <div style="flex=grow: 1;">我是中间</div> <div style="width:100px;">我是右侧</div> </div> ``` #### 响应式开发 ``` div { width: calc((100% - 20px) / 2); } ``` #### click 曾经click在移动端会有延迟,这是因为设备要检测你的点击是不是双击,因此增加了延迟。但你添加了`<meta name="viewport" content="width=device-width">`后就不会有这个问题了。也可以说,现在的移动端开发可以不用考虑click迟钝问题了。 touchstart事件:如果你将click替换成touchstart,那么确实没有延迟,但是当这个dom被滑动时,touchstart也会触发。 #### 顺序 touchstart --> touchmove --> touchend --> click