You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome/Safari阻止用户触发的Blob URL下载(GitHub Pages沙箱报错)

解决GitHub Pages上Blob API下载JSON的沙箱错误

问题根源

GitHub Pages的默认安全配置会对Blob URL的下载操作施加沙箱限制——即使你没主动使用iframe,浏览器在处理Blob生成的下载链接时,会将其上下文判定为沙箱环境,而默认配置未开启allow-downloads权限,导致Chrome和部分Safari弹出错误。

解决方案

方案一:自定义CSP头开启下载权限

在GitHub Pages项目根目录创建_headers文件,添加包含沙箱指令的CSP配置,明确允许下载操作:

/*
  Content-Security-Policy: sandbox allow-downloads allow-scripts allow-forms allow-top-navigation;
  • 保留allow-scripts确保Vue应用正常运行,其他指令可根据你的业务需求调整(比如不需要弹窗就去掉allow-popups)。
  • 提交文件到GitHub后,等待Pages重新部署,配置会自动生效。

方案二:修改下载逻辑绕开Blob URL限制

不用URL.createObjectURL生成Blob链接,改用data URI直接嵌入JSON内容,避免触发沙箱检查:

// Vue组件中的下载方法示例
const handleDownload = () => {
  // 假设userData是你要导出的用户操作数据
  const jsonStr = JSON.stringify(userData, null, 2);
  const a = document.createElement('a');
  // 直接用data URI生成下载链接
  a.href = `data:application/json;charset=utf-8,${encodeURIComponent(jsonStr)}`;
  a.download = 'user-data.json';
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
};

这种方式不需要创建Blob对象URL,直接通过内联数据触发下载,兼容性更好,也能避开沙箱限制。

内容的提问来源于stack exchange,提问作者Edwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:22:08