Chrome 后台脚本中的扩展 Firebase 不会始终加载

Chrome extension Firebase in background script wont always load

我正在尝试使用 Google Firebase 构建一个 Chrome 扩展以进行身份​​验证,我正在使用 Web 包来构建我的项目, Firebase 正在后台脚本中使用。

在第一次初始化或脚本休眠时,Firebase returns 用户为 null 并需要一些时间来读取当前用户,因此它 returns 用户为 null。

问题是如何加载 Firebase 然后发出请求,这样我就不会得到 null?

我的代码中的一些片段

const getUser = async (): Promise<firebase.User> =>
    new Promise((resolve, reject) => {
      chrome.runtime.sendMessage(
        { message: MESSAGES.getCurrentUser },
        (user: firebase.User) => {
          if (user) resolve(user);
          reject();
        }
      );
    });

并在后台脚本中

import firebase from "firebase/app";
import "firebase/auth";

firebase.initializeApp(firebaseConfig);

chrome.runtime.onMessage.addListener(
  (request: Request, sender, sendResponse) => {
    switch (message) {
      case MESSAGES.logOut:
        logOut(sendResponse);
        break;
      case MESSAGES.getCurrentUser:
        getCurrentUser(sendResponse);
        break;
        break;
    }
    return true;
  }
);

const getCurrentUser = async (sendResponse: (response?: any) => void) => {
  
  const user = await firebase.auth().currentUser;
  sendResponse(user);
};

我的清单文件

{
  "short_name": "",
  "name": "",
  "manifest_version": 3,
  "version": "0.2.0",
  "icons": {
    "16": "logo192.png",
    "48": "logo192.png",
    "128": "logo192.png"
  },
  "action": {
    "default_popup": "popup.html"
  },
  "permissions": ["activeTab", "storage", "identity", "downloads"],
  "options_page": "options.html",

  "background": {
    "service_worker": "background.js"
  },

  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["content.js"]
    }
  ]
}

经过相当多的研究发现 chrome 会在不使用后台脚本时关闭后台脚本,当您再次需要后台脚本时,它会从头开始加载 firebase,并在此加载中检查令牌而此时 firebase return 对当前用户为 null。 添加了更多逻辑来解决这个问题。