Safari 视频元素不会在 403 响应上触发错误事件

Dre*_*ene 5 javascript safari html5-video http-status-code-403 dom-events

我正在尝试从 S3 加载一个视频,该视频当时可能正在转码,也可能没有转码。当它仍在处理时,我收到 403 响应。我测试的所有其他浏览器(Chrome/Firefox/IE)都会触发“错误”事件,这样我就可以向用户显示一条消息,如下所示:

var video = document.createElement('video');
video.onerror = function (e) {
// Show the user a message...
};
video.src = videoURL;
Run Code Online (Sandbox Code Playgroud)

但 Safari(在 OSX 上)只是记录到控制台而不触发事件。

无法加载资源:服务器响应状态为 403(禁止)

如果我将 video.src 设置为垃圾 URL,不会导致任何结果,但不会触发 403,它将触发。

是否有其他我可以监听的事件或其他方式来警告用户?我知道我可能可以对视频发出单独的 ajax 请求并检查响应,但我想避免开销。

Mee*_*ohi 0

这是 Webkit 中的一个错误。

我们通过在尝试加载视频之前首先发出 HEAD 请求来检查文件的状态来处理此问题。添加往返,但通常很快:

$.ajax({
  type: "HEAD",
  url: video_filename,
  success: loadVideo,
  error: handleError
});
Run Code Online (Sandbox Code Playgroud)