关于 Chrome 音视频自动播放的问题

在 Chrome 音视频播放的时候,play() 返回的是一个 promise,当播放失败的时候一般会显示一个按钮让用户手动进行播放。 但是在浏览其他大型视频网站的时候,会发现他们的网站貌似没出现过该问题。于是去查阅了相关资料。 其实最主要查看 https://developer.chrome.com/blog/autoplay 即可得到答案。 总结就是 Chrome 有个自动播放的策略。 Chrome 中的自动播放策略 改善用户体验,减少安装广告拦截器的动机,并减少数据消耗 Chrome 66 中针对音频和视频元素推出的自动播放策略有效地阻止了 Chrome 中大约一半不需要的媒体
阅读更多

记一次数据过大导致safari渲染卡死

在一次项目开发中,Chrome 调试移动端项目没问题,但是在移动端的 safari 下,会导致 safari 卡死。 后经排查,是将 base64 的数据直接渲染到页面而导致的, 所以解决办法就是过滤掉 base64 的数据渲染。 说一下为什么要把 base64 渲染到页面,因为该项目是作为一个介绍 sdk 的使用姿势,然后展示数据。
阅读更多

在网站搭建初期给z-index 分层规范

一般来说前端架构师在网站搭建初期就要给 z index 分层: * 0+ 用于普通内容 * 16+ 用于导航 * 32+ 用于导航菜单 * 64+ 用于 tooltip * 128+ 用于 popover * 256+ 用于对话框 * 1024+ 用于 loading 类似这样
阅读更多

Chrome 中 post 请求体过大导请求体和响应体无法正常展示

背景 Chrome 版本: 版本 95.0.4638.54(正式版本) (arm64) 机型如下: * macOS Big Sur * MacBook Pro (13-inch, M1, 2020) * 芯片 Apple M1 * 内存 16GB 一次开发中,一个 post 请求的请求体含有多个 base64 数据,在 Chrome 中请求后遇到如下问题: * http 响应 500 (服务端错误,忽略) * 请求体消失了 * 响应体无法显示 在服务端 500 问题修复之后,起初以为请求体和响应体不显示的问题会导致请求体丢失导致无法正常响应,可是发现只是 Chrome
阅读更多

Vite 无法通过 import xxx from 'path/xxx.umd.js' 的方式正常引入 UMD 模块使用

背景 首先打包出一个 umd 模块的 js 库,这里用 add.umd.js 来表示这个库吧。 然后测试发现: * 在 create-react-app 的项目中通过 import add from 'path/add.umd.js' 方式可以正常引入并使用 * 在 Vite 的项目中(个人测试是通过 yarn create vite 选择 react-ts 模板生成) import add from 'path/add.umd.js' 无法正常导入并使用。然而通过 import 'path/add.umd.js' 却可以正常导入,使用姿势大致如下所示:
阅读更多

Nginx 正则配置实现带版本号请求页面

需求背景 访问 https://www.xxx.com/1.0.0/ 响应 1.0.0 版本的页面。 访问 https://www.xxx.com/1.0.1/ 响应 1.0.1 版本的页面。 访问 https://www.xxx.com/1.0.2/ 响应 1.0.2 版本的页面。 以此类推… History 模式路由 在部署 History 模式路由的页面的时候,我们需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 http://oursite.com/user/id 就会返回 404,这就不好看了。 因为这么做以后,你的服务器就
阅读更多

Mock.js 拦截了二进制流数据的请求.md

背景 在一次开发中,客户提出我们提供的 SDK 无法正常使用,但是我们提供的 demo 可以正常使用。后经对比排查发现,客户的项目中引入了 Mock.js 而导致的 SDK 中对二进制资源的请求被拦截并进行了处理,导致请求的资源发生错误。 产生的原因 后通过在 Mock.js 的 repo issues 里也有搜索到 相关 issue。 原因在于引入 Mock.js 发出请求后,服务器端返回的文件为二进制流,原生请求会正常的将其作为 blob 对象返回,而 Mock.js 则会将其转为字符串,Mock.js 完全重写了原生的 XMLHttpRequest。 如何解决 可以参考该 comm
阅读更多

base64 及 base64 url-safe

背景 在一次开发中,服务端需要接受某个参数为 base64 编码的值,测试所得服务端所得的编码值无法与前端所传的值匹配不上,即所传的参数不是服务端所需的正确的编码值。后联调得知,服务端需要接收的是 base64 url-safe 的值,所以前端需要也对数据进行 base64 编码为 url-safe 的值。 遇到问题的相关 issue: https://github.com/brix/crypto-js/issues/252 问题复现 1 2 3 4 5 // 有效的 base64 字符如下: // ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop
阅读更多

Go语言中占位符的使用

原文地址: https://studygolang.com/articles/21039 定义示例类型和变量 1 2 3 4 type Human struct { Name string } var people = Human{Name:"zhangsan"} 1. 普通占位符 占位符说明举例输出%v相应值的默认格式。Printf(“%v”, people){zhangsan}%+v打印结构体时,会添加字段名Printf(“%+v”, people){Name:zhangsan}%#v相应值的Go语法表示Printf(“#v”, people)main.Human{Name:”
阅读更多

go test报错 wrong signature for TestAdd, must be: func TestAdd(t *testing.T)

参考: https://www.cnblogs.com/mingbai/p/gotesterr.html 背景 学习 Go 过程中,在终端输入 go test 显示报错: 1 $ wrong signature for TestAdd, must be: func TestAdd(t *testing.T) 后经搜索该报错查明示由于 func TestAdd(t testing.T) 参数未带 *,需要改为 func TestAdd(t *testing.T) 问题复现 报错代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
阅读更多