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

Chrome 65版本Chrome应用自动下载Blob文件问题求助

解决Chrome 65+扩展中FileSaver.js下载日志的报错问题

嘿,我之前开发Chrome扩展时也碰到过一模一样的坑!Chrome 65对blob URL的安全限制做了调整,直接用旧版FileSaver的方式就会触发那个"Can't open same-window link"错误,加target="_blank"又会弹出烦人的安全提示。给你两个靠谱的解决办法:

方案一:使用Chrome扩展原生的chrome.downloads API(推荐)

这是官方支持的下载方式,完全避开blob URL的限制,体验更流畅,还不会有弹窗问题。

步骤:

  1. 先在你的扩展manifest.json里添加downloads权限:
{
  "manifest_version": 3, // 适配你当前用的manifest版本
  "permissions": ["downloads"],
  // 其他扩展配置...
}
  1. 替换原来的FileSaver调用代码,改成下面的逻辑:
// 假设logContent是你的日志文本内容
const saveLogFile = (logContent) => {
  const blob = new Blob([logContent], { type: 'text/plain;charset=utf-8' });
  const blobUrl = URL.createObjectURL(blob);

  chrome.downloads.download({
    url: blobUrl,
    filename: 'app-log.txt', // 自定义你的日志文件名
    saveAs: false // 设为true会让用户选择保存位置,false直接下载到默认路径
  }, (downloadId) => {
    if (chrome.runtime.lastError) {
      console.error('日志下载失败:', chrome.runtime.lastError.message);
    }
    // 下载完成后记得释放blob URL,避免内存泄漏
    setTimeout(() => URL.revokeObjectURL(blobUrl), 1000);
  });
};

方案二:修改FileSaver的调用逻辑,绕过弹窗限制

如果不想用downloads API,也可以手动创建隐藏的<a>标签来触发下载,避免target="_blank"的问题:

const saveLogFile = (logContent) => {
  const blob = new Blob([logContent], { type: 'text/plain;charset=utf-8' });
  const downloadLink = document.createElement('a');
  downloadLink.href = URL.createObjectURL(blob);
  downloadLink.download = 'app-log.txt';
  
  // 把链接添加到页面,模拟点击后再移除
  downloadLink.style.display = 'none';
  document.body.appendChild(downloadLink);
  
  // 用MouseEvent模拟点击,比直接调用click()更可靠
  const clickEvent = new MouseEvent('click', {
    bubbles: true,
    cancelable: true,
    view: window
  });
  downloadLink.dispatchEvent(clickEvent);
  
  document.body.removeChild(downloadLink);
  setTimeout(() => URL.revokeObjectURL(downloadLink.href), 1000);
};

为什么旧方法失效了?

Chrome 65开始严格限制了blob:chrome-extension://协议的同窗口打开行为,原来的FileSaver.js可能是直接通过打开blob URL来触发下载,这在新版本里被浏览器的安全策略阻止了。而添加target="_blank"会触发Chrome的弹出窗口拦截提示,因为扩展内的弹窗需要明确的用户交互授权。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:27:01