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

window.showDirectoryPicker()报错file picker already active的解决方案求助

解决方案

这个问题是因为浏览器判定存在活跃的文件选择器实例,导致重复调用被拦截。核心解决思路是添加状态锁,避免重复触发选择器请求:

修改后的代码

const btn = document.getElementById('btn');
const pre = document.getElementById('pre');
let isPickerActive = false; // 标记是否有活跃的选择器

btn.addEventListener('click', async (e) => {
  // 如果已有活跃选择器,直接返回
  if (isPickerActive) return;
  isPickerActive = true;

  try {
      const dirHandle = await window.showDirectoryPicker();
      pre.innerHTML = `${dirHandle.name}`;
  } 
  catch (error) {       
      console.log(error);      
  } finally {
      // 无论成功/失败/取消,都重置状态锁
      isPickerActive = false;
  }
});

原理说明

  • 用isPickerActive变量标记当前是否有正在进行的选择器请求,点击按钮时先检查这个状态,避免重复触发。
  • 在finally块中重置状态,确保无论用户选择目录、取消窗口还是出现错误,状态都会被正确恢复,下次点击按钮能正常唤起选择器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:57:05