NS_BINDING_ABORTED 仅在 Firefox 中首次尝试 PUT 时

NS_BINDING_ABORTED only on first PUT attempt in Firefox

在我的 JS 单页 Web 应用程序中,我有一个 reset-button 触发 'onclick' 并将使用 vanilla fetch() 将一个空的 JSON 数组放入我的 API.两者都托管在同一个 domain/server 上。使用 Firefox(目前为 86.0)时,我第一次按下重置按钮时,呼叫被中止。控制台显示 NetworkError when attempting to fetch resource 白色,网络选项卡在已传输的列中显示 NS_BINDING_ABORTED

当我重新加载我的应用程序 (F5) 并再次按下同一个按钮时,它起作用了。从现在开始的任何时候。当执行相同的代码时,失败调用和工作调用将发送相同的 headers 和有效负载。

Chrome 未显示此行为,第一个调用也有效。

更奇怪的是,Firefox 中第一次失败的 PUT 调用似乎每个 URL 只失败一次。 Web 应用程序在前端 URL 向用户提供“区域”,例如

https://example.org/areas/#/myAreaA

https://example.org/areas/#/myAreaB

这些将 PUT 到 API,它们的 URL 中也有这些 ID:

https://example.org/api/areas/myAreaA/state/

https://example.org/api/areas/myAreaB/state/

对于这些 URL 中的每一个,第一个 PUT 调用失败 NS_BINDING_ABORTED 但此后可以正常工作。如果我将此类区域的 URL 复制到新选项卡中,甚至再次关闭+打开浏览器,错误不会再次出现。 Web 应用程序不使用任何 cookie。

Web 应用程序对同一个 backend/areaID 进行了很多其他 API 调用,没有其他显示此行为。但是,这是唯一的 PUT 调用,所有其他调用都是 GET/POST/HEAD/PATCH 请求。

第一个 PUT 失败的原因可能是什么?

关注 我发现了问题。 Firefox 的 onclick 事件传播似乎在此处干扰了 fetch() 调用。我一添加

event.preventDefault()

在 onclick-handler 之前 执行实际的 fetch(),一切又开始工作了。