javascript - 在 Firefox 中调用 AJAX 后文件浏览器未打开
问题描述
在成功的 AJAX 调用后以编程方式单击文件输入不会在 Firefox 中打开文件浏览器,但在 Chrome 中可以正常工作。我在82.0.3(64 位)、Mozilla Firefox for Ubuntu canonical - 1.0和83.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
解决方案
这似乎是一个 Firefox 弹出窗口阻止程序问题。如果您更改dom.disable_open_during_load
为false
in 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);
推荐阅读
- c# - 如何线程安全并使并行任务、并行化和线程安全
- python - 在烧瓶的不同 wtfforms 中使用相同的变量名
- python - Youtube API - python 数据下载脚本错误
- autocomplete - 在实时模板中记录下一行/上一行代码 (JetBrains IDE)
- javascript - 当我执行查询 gV().ToList() 时,如何让 gremlin 返回顶点的属性?当前返回未定义
- php - assertDatabaseHas 失败说“表是空的”
- flutter - 使用 Intl 包 (DateFormat) 时项目无法编译
- java - 安卓 X 项目
- java - 使用 DBMS_CRYPTO 但使用 dbms_obfuscation_toolkit 时出错
- javascript - 当请求已经发布但响应尚未到来时,如何防止刷新浏览器窗口?