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

如何在Flutter Web中使用js.context.callMethod('open')不新开标签下载文件?

Flutter Web 实现当前标签页内文件下载

你之前使用的js.context.callMethod('open', [zip, '_blank'])会触发新标签页下载,要在当前标签页完成下载,可以通过创建隐藏的<a>标签并模拟点击的方式实现,具体代码如下:

首先确保已导入js包,然后添加以下下载方法:

import 'package:js/js.dart';

void downloadInCurrentTab(String fileUrl, String saveFileName) {
  // 创建a标签元素
  final downloadLink = js.context.callMethod('document.createElement', ['a']);
  // 设置文件地址
  downloadLink.href = fileUrl;
  // 指定下载后的文件名
  downloadLink.download = saveFileName;
  // 隐藏标签避免页面干扰
  downloadLink.style.display = 'none';
  // 将标签添加到页面DOM中
  js.context.callMethod('document.body.appendChild', [downloadLink]);
  // 模拟点击触发下载
  downloadLink.click();
  // 下载完成后移除标签
  js.context.callMethod('document.body.removeChild', [downloadLink]);
}

调用时直接传入你的zip文件地址和想要保存的文件名即可:

// 示例:传入zip文件的URL和文件名
downloadInCurrentTab(zip, 'archive.zip');

这个方案利用浏览器原生的下载链接特性,通过模拟点击隐藏的下载链接,实现当前标签页内的文件下载,不会打开新标签页。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:06:02