首页 > 解决方案 > 在 Firefox 中调用 AJAX 后文件浏览器未打开

问题描述

在成功的 AJAX 调用后以编程方式单击文件输入不会在 Firefox 中打开文件浏览器,但在 Chrome 中可以正常工作。我在82.0.3(64 位)、Mozilla Firefox for Ubuntu canonical - 1.083.0(64 位)Mozilla Firefox for Windows - 目前是最新版本上遇到了这个问题。我不确定我在这里做错了什么还是Firefox的错误。请帮帮我。

以下是代码示例:

ReactJS:https ://codesandbox.io/s/gifted-napier-32n1o?file=/src/UploadOption/UploadOption.js

Javascript:https ://codesandbox.io/s/condescending-sea-yv67c?file=/src/index.js

标签: javascriptreactjsajaxfirefox

解决方案


这似乎是一个 Firefox 弹出窗口阻止程序问题。如果您更改dom.disable_open_during_loadfalsein about:config,则它开始工作。

所以 Firefox 似乎认为异步 click() 调用不是用户交互的一部分,因此阻止了弹出窗口。

我已经为此提交了https://bugzilla.mozilla.org/show_bug.cgi?id=1678389,并发送了一个补丁。

就解决方法而言,弹出窗口阻止程序状态会在超时期间保留,所以这样的事情应该可以工作:

  var ready = false;
  xhttp.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      ready = true;
    }
  };

  setTimeout(function tryReady() {
    // Does not open file explorer in mozilla firefox,
    // but the function is triggered!
    if (ready) {
      openExplorer();
    } else {
      setTimeout(tryReady, 500);
    }
  }, 500);

推荐阅读