IE不支持video标签的download属性且右键无“另存为”;同源时可用XMLHttpRequest+msSaveBlob下载,跨域需服务端配置CORS响应头。

IE 不支持 download 属性,点右键也无“另存为”选项
IE(包括 IE11)完全不识别 标签上的 download 属性,点击视频右键菜单里也不会出现“另存为视频”——这不是权限问题,是浏览器根本没实现该功能。HTML5 视频在 IE 中默认以 application/octet-stream 或 video/mp4 类型内嵌播放,但不暴露原始资源 URL 给用户下载链路。
用 XMLHttpRequest + Blob 手动触发下载(仅限同源)
如果视频地址和当前页面同源(协议+域名+端口一致),可绕过限制:用 XMLHttpRequest 获取视频二进制流,转成 Blob,再用 URL.createObjectURL() 生成临时链接并模拟点击下载。注意 IE10+ 支持 Blob,但需用 msSaveBlob 替代标准 saveAs。
function downloadVideoIE(videoUrl, filename) {
if (window.navigator.msSaveBlob) {
var xhr = new XMLHttpRequest();
xhr.open('GET', videoUrl, true);
xhr.responseType = 'blob';
xhr.onload = function() {
if (xhr.status === 200) {
window.navigator.msSaveBlob(xhr.response, filename || 'video.mp4');
}
};
xhr.send();
}
}
- 必须确保
videoUrl是同源地址,跨域会触发 CORS 错误(XMLHttpRequest拒绝加载) - IE 不支持
fetch(),只能用XMLHttpRequest - 文件名后缀要匹配实际 MIME 类型,否则 IE 可能保存为无扩展名文件
跨域视频无法直接下载,需服务端配合加 CORS 头
如果视频来自 CDN 或其他域名,IE 下 XMLHttpRequest 会因缺少响应头被拦截。服务端必须返回以下至少两个响应头:
-
Access-Control-Allow-Origin: *(或指定域名) Access-Control-Allow-Methods: GET- 若带认证(如 cookie),还需
Access-Control-Allow-Credentials: true并在 xhr 中设withCredentials = true
缺任一关键头,IE 控制台会报错:SEC7120: Origin not found in Access-Control-Allow-Origin header,请求直接失败。
立即学习“前端免费学习笔记(深入)”;
IE11 的 MediaSource 不支持直接导出,别白费力气
有人试图用 MediaSource + sourceBuffers 拦截解码前的数据,这条路在 IE11 上走不通:MediaSource 在 IE 中仅支持 MSE(Media Source Extensions)播放,不提供读取或导出已加载 segment 的 API。所有基于 sourceBuffer 的“监听写入数据”方案,在 IE 下都会静默失败或抛 InvalidStateError。
真正可行的路径只有两条:同源时用 msSaveBlob;跨域时让服务端开 CORS 并确保客户端能发过去请求。其它花式 hook 播放器、覆盖右键菜单、注入 iframe 的方法,在 IE11 的安全模型下基本都受限或失效。










