2021-09-02 19:06:45
问题核心在于 Firefox 浏览器中出现的 NS_BINDING_ABORT 错误,该错误通常与页面导航(如重定向)过程中未正确处理的异步操作或资源释放有关。结合代码分析,主要存在以下潜在原因及解决方案:
1. 异步操作未完成时触发重定向确保 HTTPS 协议已启用(sameSite: "none" 必须与 secure: true 共用)。
检查后端是否正确返回 Set-Cookie 头,且域名与前端一致。
使用取消令牌(AbortController)中止未完成的请求:const onSubmit: SubmitHandler = async (data) => { const controller = new AbortController(); setIsPending(true); try { const validatedData = ValidationSchema.parse(data); const response = await axios.post( API_URL + "/users/api/v1/auth/login", validatedData, { signal: controller.signal } ); // 其余逻辑... } catch (error) { if (axios.isCancel(error)) { console.log("请求已取消", error); } else { // 其他错误处理 } } finally { setIsPending(false); controller.abort(); // 清理 }};
在组件卸载时取消所有未完成请求(通过 useEffect 清理函数)。
确保 login action 是异步的(如 Redux Thunk),并等待其完成:const loginUser = (userData) => async (dispatch) => { dispatch({ type: "LOGIN_START" }); try { // 模拟异步操作(如 API 调用) await new Promise(resolve => setTimeout(resolve, 100)); dispatch({ type: "LOGIN_SUCCESS", payload: userData }); } catch (error) { dispatch({ type: "LOGIN_FAILURE", error }); }};// 调用时await dispatch(loginUser(userData));
检查 Redux DevTools 确认状态更新无错误。
在无痕模式下测试,或禁用扩展逐一排查。
清除浏览器缓存和 Cookie 后重试。
若问题仍未解决,建议提供 Firefox 控制台完整的错误堆栈(包括网络请求详情)以进一步分析。