HTML5中不存在html5play函数,正确方法是调用video.play()并用.catch()处理NotAllowedError等拒绝错误,且必须由用户手势触发。
浏览器原生没有 html5play 这个函数——它既不是 HTML5 规范里的 API,也不是任何主流浏览器的内置方法。你看到的报错 Uncaught ReferenceError: html5play is not defined,说明代码里直接调

常见来源包括:复制了别人半截没上下文的示例、混淆了自定义封装函数名、或是误把某个库的私有方法当全局 API 用。
play() 方法 + catch 处理拒绝错误HTML5 媒体真正可用的是 HTMLMediaElement.prototype.play,但它返回 Promise,且在用户未交互(如点击)时可能被拒绝。不加 catch 就会抛出未捕获异常:
const video = document.querySelector('video');
video.play()
.catch(err => {
console.warn('播放被阻止', err.name); // 常见为 'NotAllowedError'
});
play() 必须由用户手势触发(click/tap),否则现代浏览器一律拒绝NotAllowedError,不是 TypeError 或网络错误try/catch 包 play() 调用本身——它同步返回 Promise,异常发生在 Promise reject 阶段error 事件只管加载失败,不管自动播放策略video 元素的 error 事件只响应资源加载问题(如 404、解码失败),对 play() 被策略拦截完全无感:
video.addEventListener('error', () => {
console.error('视频文件出问题了');
});
NotAllowedError
play().catch,且无法区分是网络问题还是跨域问题networkState 和 readyState 属性可进一步判断失败原因所谓“html5play”如果真是项目里存在的函数,大概率是团队自己写的封装。它的异常处理必须显式覆盖三类情况:
click 后再调用 play()
.catch() 捕获并提示用户手动点击播放video.networkState === HTMLMediaElement.NETWORK_NO_SOURCE
硬套一个名字没意义,关键是把浏览器策略、用户行为、媒体状态这三层耦合关系理清楚。漏掉任意一层,都会在 iOS 或 Chrome 新版本里突然失效。