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

Firebase Realtime Database在Chrome中写入数据后跳转页面功能异常

问题根因

set()是Firebase提供的异步方法,执行后会返回Promise对象,不会阻塞后续代码运行。你当前的写法没有等待写入操作完成就触发了页面跳转,Chrome会在页面卸载时直接中断未完成的网络请求,就出现了跳转成功但数据没写入的情况;Safari对异步请求的处理逻辑不同,才会出现写入成功的情况。
另外你的代码存在一处拼写错误:变量定义为btn,绑定事件时错写为bbtn,也可能导致执行异常。

修复方案

将senddata改为异步函数,等待set执行完成后再跳转,同时补充错误处理逻辑,避免写入失败时无感知跳转:

import { initializeApp } from 'https://www.gstatic.com/firebasejs/9.1.2/firebase-app.js';
import { getDatabase, set, ref } from 'https://www.gstatic.com/firebasejs/9.1.2/firebase-database.js';

const firebaseApp = initializeApp({
    apiKey: "xxx",
    authDomain: "xxx",
    databaseURL: "xxx",
    projectId: "xxx",
    storageBucket: "xxx",
    messagingSenderId: "xxx",
    appId: "xxx",
});

const db = getDatabase(firebaseApp)

const x = document.getElementById("Identifiant");
const y = document.getElementById("Password");

// 改为async异步函数
async function senddata(e) {
    // 可选:防止form表单默认提交行为
    e.preventDefault();
    try {
        // 等待写入操作完成
        await set(ref(db, 'users/' + x.value), {
            username: x.value,
            password: y.value
        });
        // 写入成功后再跳转
        window.location.href = 'https://www.youtube.com';
    } catch (error) {
        // 可自行添加写入失败的提示逻辑
        console.error('数据写入失败:', error);
    }
}

const btn = document.getElementById('btnconx');
// 修复拼写错误:bbtn改为btn
btn.addEventListener('click', senddata);
额外优化建议
  • 前端直接明文存储密码是严重的安全问题,建议改为走身份认证逻辑,不要直接把密码明文写入数据库
  • 按钮在form表单内部时,建议显式阻止默认提交行为,避免意外触发表单提交刷新页面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:45:03