登录后在 chrome 扩展中弹出 window

popup window in chrome extension after doing login

我正在尝试创建具有以下规格的 Chrome 扩展:

  1. 安装扩展。 --> 单击扩展图标。
  2. 每次单击图标时,后台脚本都会检查访问令牌是否存在。
  3. 如果访问令牌不存在(这是第一次用户的情况),将显示一个单独的 window(使用 window.open())提示用户登录。
  4. 如果存在访问令牌,单击该图标后应该会显示一个 chrome 扩展程序弹出窗口。

在我当前的实现中,我没有在 manifest.json 中设置默认弹出窗口。如果后台脚本发现存在访问令牌,它会使用 chrome.browserAction.setPopup 设置弹出窗口。但是,只有在我单击该图标两次后才会显示弹出窗口。我知道这是因为它在第一次点击时设置弹出窗口,然后在第二次点击时显示它。但是,有什么办法让它显示在第一个吗?

有没有更好的方法来实现这个逻辑,这样我就不必在每次检测到访问令牌时都设置弹出窗口并要求用户单击两次(我认为这不是很人性化) ?

谢谢!

遗憾的是,正如您所描述的那样 -

在某些情况下(包括您的)有 talks about enabling you to open a popup programmatically,但它们变得非常复杂,因此没有时间表。


但是,对于您的情况,这是一个相对简单的修复..

您应该在获得令牌后立即调用 setPopup,以便下次点击成功。

如果您需要验证令牌是否有效,最好弹出窗口打开后进行。如果无效,则在弹出窗口中显示一个大 "log in" 按钮,而不是其通常的内容。

所以经过一天的认真努力。我想出了一个办法来做到这一点。因此,可能这样做的唯一方法是将 cookie 中的 accessToken 设置为您的域,并让 chrome 扩展程序跟踪该域的 cookie。 chrome.cookies.onChanged 中有一个事件 - 这使您可以跟踪任何已更改的 cookie。

所以步骤如下

  1. 将默认弹出窗口设置为 login/singup 屏幕
    "browser_action":{"default_popup": "signin.html"},
  2. 在您的 background.js 中,您有一个跟踪 cookie 的功能 - 并根据该功能更新您的屏幕
  3. 同时检查用户是否已经在后台脚本的初始 运行 上登录

查看我的要点以获得更多理解 - background.js