javascript - Firebase/JS - 在加载页面之前触发 JavaScript?

标签 javascript html firebase firebase-realtime-database

我目前正在制作一个 JavaScript 脚本,用于从实时数据库中获取用户数据

/* Fetch User Data from Firebase */

function userInfo() {
    var username;
    var usertype;
    var barangay;

    firebase.auth().onAuthStateChanged(function(user) {
      if (user) {
        var userId = firebase.auth().currentUser.uid;
        return firebase.database().ref('/users/' + userId).once('value').then(function(snapshot) {
        username = (snapshot.val() && snapshot.val().name) || 'Unknown';
        barangay = (snapshot.val() && snapshot.val().barangay) || 'Unknown';

        document.getElementById('fullname').innerHTML = username; //Sets the username in the Webpage. 
        });
      } else {
        window.location.replace("../index.html"); //redirect
      }
    });
  }
  window.onload = userInfo();

window.onload = userInfo();是我当前用来使脚本在页面加载时触发的代码,但这会导致更新innerHTML 中的数据的延迟。 (例如: <p id='fullname'> 的内容是“USERNAME”,并将使用从脚本中获取的“用户名”进行更新。)。我尝试过将JS文件放在页面顶部,结果相同。

我的问题是,有没有办法让这个脚本在页面加载之前首先触发?或者有更有效的方法来处理这个脚本吗?

最佳答案

理论上,如果将脚本放在 head 标签中,请求将在 DOM 加载之前(异步)触发。但是,您不知道请求需要多长时间才能完成。甚至可能会失败。

我的建议是向客户端提供某种信息正在加载的反馈(即显示进度指示器)。关于如何实现这一点的文章有无数篇。

请记住,在检索信息之前您不必显示任何内容。这完全取决于你。

关于javascript - Firebase/JS - 在加载页面之前触发 JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54397207/

相关文章:

javascript - 模拟固定的侧边栏模板问题

Firebase 存储 - 图像预览正在永久加载

android - 引用文档的 Firestore 最佳实践

javascript - 在 API.ai 的文本响应中添加新行 (\n)

javascript - jQuery DataTables 按 n 列复选框排序

html - 如何在表格中显示来自文本区域的换行符?

html - 基于 CGI-BIN 的 Web 开发的主要缺点是什么?

Android firebase 推送通知最低版本问题

javascript - 如何在页面刷新之间保留变量的值?

javascript - Django 模板,在 javascript post 后重新加载