我在从跨域加载 vtt 时遇到问题:"加载 URL 域的不安全尝试......协议和端口必须匹配。 我试图在视频中添加crossorigin="true",它在chrome和firefox中工作,但在Internet Explorer 11中不起作用。 有没有其他方法可以从IE11中的跨域获取vtt文件?
<video controls autoplay crossorigin="true">
<source src="http://ronallo.com/demos/webvtt-cue-settings/soybean-talk-clip.mp4" type="video/mp4">
<track label="Captions" kind="captions" srclang="en" src="http://ronallo.com/demos/webvtt-cue-settings/soybean-talk-clip.vtt" id="caption-change-track" default="">
</video>
video
上的crossorigin
属性需要anonymous
或use-credentials
<video controls autoplay crossorigin="use-credentials">
<source src="http://ronallo.com/demos/webvtt-cue-settings/soybean-talk-clip.mp4" type="video/mp4">
<track label="Captions" kind="captions" srclang="en" src="http://ronallo.com/demos/webvtt-cue-settings/soybean-talk-clip.vtt" id="caption-change-track" default="">
</video>
Mozilla的解释
跨源
此枚举属性指示是否使用 CORS 提取相关映像。启用 CORS 的资源可以在元素中重用而不会受到污染。允许的值为:
匿名
发送没有凭据的跨源请求。换句话说,它发送没有 cookie、X.509 证书或执行 HTTP 基本身份验证的 Origin: HTTP 标头。如果服务器未向源站点提供凭据(通过不设置访问控制允许源:HTTP 标头),则图像将被污染,并且其使用受到限制。
使用凭据
发送带有凭据的跨源请求。换句话说,它发送带有 cookie、证书或执行 HTTP 基本身份验证的 Origin: HTTP 标头。如果服务器未向源站点提供凭据(通过访问控制允许凭据:HTTP 标头),则图像将被污染并限制其使用。
当不存在时,在没有 CORS 请求的情况下获取资源(即不发送 Origin: HTTP 标头),防止其在元素中使用。如果无效,则将其处理为使用枚举的关键字匿名。有关其他信息,请参阅 CORS 设置属性。
您需要在请求 vtt 文件时在响应中包含以下标头,从而在原始服务器上设置跨域策略:
Access-Control-Allow-Origin: *
如果需要,您还可以将允许的域限制为特定条目。
从客户端,您无法强制覆盖,尽管正确设置了crossorigin
属性(请参阅 https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) - 在这种情况下,anonymous
确实有助于浏览器正确协商请求