首页 > 解决方案 > 如何跨多个页面从firebase获取uniqueID

问题描述

我的项目是有几页的调查。我想将几个页面的答案上传到同一个 uniqueID 中。现在我可以从页面 js 文件中获取 uniqueID,但是如何将这个 uniqueID 传输到其他 js 文件,以便我可以将数据上传到相同的 uniqueID。

标签: javascriptfirebase

解决方案


问题可以重新表述为如何通过不同的页面和 js 文件访问变量值。

  • 我更喜欢的方式——有大量数据——是加载“全局脚本”的用户不可见的基本页面。此基本页面加载和卸载所有其他页面(包括 js 和 css 文件)。由于您的情况下的变量 firebaseID 是全局定义的,因此它可以工作。
  • 如果它的数据不合理,您也可以将其放入 LocalStorage(最好是加密的),如果用户想暂停调查并稍后完成调查,这也将有所帮助。(您在移动设备上有 5MB,在桌面设备上有 10MB)。

有关解决方案一的更多详细信息:
简单的部分是将 HTML 插入其他 HTML。我使用服务器生成的视图,因此基本页面会根据需要添加和删除 HTML。更难的部分是 js 的页面(视图)特定加载。
在我的用例中,用户可以通过导航跳来跳去,直到他们最终提交并完成。如果您只允许顺序向前移动而不允许向后移动,那就更容易了。我实际上模仿了一种安宁的行为。基本脚本中的一些构建块包括

// Some global vars
var statMsg = "";
var navTargetInitial= "app";
var navTarget;
var htmlDir = "app";    // directory of the html templates
var scriptDir = "js";   // directory of the user scripts

var routes = [
{
    navTarget: "main", 
    loadScript: true,
    navTitle: "Survey page 1",
    navMenutext: "Page 1"
}, {
    navTarget: "app",  
    loadScript: true,
    navTitle: "Survey page 2",
    navMenutext: "Page 2"
}, 
....
];

// Then docReady beside other stuff
function docReady() {
// other stuff
nav2Page(navTarget);
}

// here we handover data, put relevant things to sessionStorage
window.onbeforeunload = function (e) {
// Do stuff
};

 // here we cleanup
window.onunload = function () {
    // cleanup
};

关键部分是在 html 进入 DOM 之后加载新的 js,因此重要的部分是事件 DOM 加载的事件处理程序

document.addEventListener("DOMContentLoaded", 
 loadJScript(navScript, function(response, status, xhr ){// error handling }

剩下的就是 ajax、错误处理、对页面历史中后退/前进点击的反应以及相应的反应。希望这可以帮助


推荐阅读