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

为何showDirectoryPicker会挂起?网页文件夹扫描功能异常求助

解决思路

以下是针对showDirectoryPicker()未返回问题的排查方向:

  • 检查运行环境与兼容性
    File System Access API仅支持HTTPS环境(localhost可例外),且需要浏览器版本满足要求:Chrome/Edge 86+,Firefox需手动开启dom.fs.enabled配置。另外,浏览器隐私模式可能限制API功能,建议在常规模式下测试。

  • 添加错误捕获排查具体问题
    当前代码未对showDirectoryPicker()的调用做异常处理,若授权过程中出现错误(如权限被隐性拒绝、浏览器内部异常),会导致await卡住且无日志输出。修改代码添加try/catch:

    jQuery(document).ready(function ($) {
      const butDir = document.getElementById('butDirectory');
      butDir.addEventListener('click', async() => {
        console.log("1");
        try {
          const dirHandle = await window.showDirectoryPicker();
          console.log("2");
          const promises = [];
          for await (const entry of dirHandle.values()) {
            if (entry.kind !== 'file') {
              continue;
            }
            promises.push(entry.getFile().then((file) => `${file.name} (${file.size})`));
          }
          console.log(await Promise.all(promises));
        } catch (err) {
          console.error('目录选择失败:', err);
        }
      });
    });
    

    运行后查看控制台的错误信息,这是定位问题最直接的方式。

  • 排查扩展与隐私设置干扰
    广告拦截器、隐私类浏览器扩展(如uBlock Origin、Privacy Badger)可能会阻止API的权限请求或执行。临时禁用所有扩展,同时检查浏览器设置中“网站访问文件系统”的权限是否开启。

  • 隔离测试排除代码冲突
    编写极简独立测试代码,排除jQuery或其他页面代码的干扰:

    <button id="testBtn">选择目录</button>
    <script>
      document.getElementById('testBtn').addEventListener('click', async () => {
        console.log('1');
        try {
          const dir = await window.showDirectoryPicker();
          console.log('2', dir.name);
        } catch (e) {
          console.error('错误详情:', e);
        }
      });
    </script>
    

    若该测试代码能正常运行,说明原问题是页面其他代码冲突导致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:40:58