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

Posted

技术标签:

【中文标题】Safari 视频元素不会在 403 响应时触发错误事件【英文标题】:Safari video element doesn't trigger error event on 403 response 【发布时间】:2014-03-14 07:58:32 【问题描述】:

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

var video = document.createElement('video');
video.onerror = function (e) 
// Show the user a message...
;
video.src = videoURL;

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

加载资源失败:服务器响应状态为 403 (Forbidden)

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

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

【问题讨论】:

【参考方案1】:

这是 Webkit 中的一个错误。

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

$.ajax(
  type: "HEAD",
  url: video_filename,
  success: loadVideo,
  error: handleError
);

【讨论】:

以上是关于Safari 视频元素不会在 403 响应时触发错误事件的主要内容,如果未能解决你的问题,请参考以下文章

移动 Safari:视频元素上的链接 (<a>) 元素在点击时不起作用

Translate3d 不会在 Safari 中移动嵌入元素(仅限 Windows)

iPad 上的 HTML5 视频元素不会触发 onclick 或 touchstart 事件?

iOS 9 上的 Safari 不会触发隐藏输入文件的点击事件

使用 Mobile Safari“表单助手”在选择元素上未触发更改事件

403禁止视频错误