【发布时间】:2016-12-22 23:40:42
【问题描述】:
我正在尝试确定浏览器是否支持加载时自动播放。
我正在使用以下代码,它在 Android chrome 上运行良好,但对于桌面 Chrome,.catch 或 .then 中的任何行都没有被执行。承诺似乎只是无限期地返回待处理的承诺。
这是一个实际的 Chrome 错误还是我不明白 Promise 在这里是如何工作的?
const promise = document.createElement('video').play();
if (promise instanceof Promise) {
promise.catch((error) => {
// Check if it is the right error
if (error.name === 'NotAllowedError') {
autoPlayAllowed = false;
} else {
throw error;
}
}).then(() => {
if (autoPlayAllowed) {
// Autoplay is allowed - continue with initialization
console.log('autoplay allowed')
} else {
// Autoplay is not allowed - wait for the user to trigger the play button manually
console.log('autoplay NOT allowed')
}
});
} else {
// Unknown if allowed
console.log('autoplay unknown')
}
谢谢!
【问题讨论】:
-
你从来没有为你的视频设置一个 src 吗?你预计会出现什么样的错误?
-
感谢@Kaiido 的回复,我添加 src 后似乎也得到了相同的结果,我是否还缺少其他内容? var test = document.createElement('video'); test.setAttribute("src", "vjs.zencdn.net/v/oceans.mp4"); var promise = test.play(); ...(与有问题的代码相同)结果:Promise {[[PromiseStatus]]: "pending", [[PromiseValue ]]: 未定义}
-
这真的很奇怪。关于定义 autoPlayAllowed 的好发现,有了它我至少可以从函数中返回一些值(并且
.catch似乎在 Android Chrome 上成功捕获了错误,这正是我所需要的)
标签: javascript google-chrome promise html5-video