小编Roz*_*hik的帖子

如何让 Identity.launchWebAuthFlow 从浏览器扩展弹出窗口而不是后台脚本中工作?

我正在尝试制作一个可以通过 google 进行身份验证的 Firefox(以及后来的 chrome)扩展。

\n

我按照此处概述的步骤进行操作:https ://github.com/mdn/webextensions-examples/tree/master/google-userinfo

\n

当我遵循他们的格式时,一切都会按预期进行。但是,一旦单击工具栏按钮,他们的示例就会启动身份流。

\n

我正在尝试使其适应从下拉弹出窗口工作,该弹出窗口还显示我自己的应用程序 un:pw 登录,然后是使用 Google 登录的选项。

\n

当我从弹出窗口启动身份流程时,一切正常,直到登录后收到回调。

\n

该应用程序打开一个弹出窗口,我登录,弹出窗口关闭,代码中没有任何内容继续,并且我收到一条错误消息,其中包含以下内容:

\n
\ng_CS[e] is null                     2 background.js:1\n    receiveCS              moz-extension://cbd583bf-c5d9-9f48-a42b-8c3ace7a778b/background.js:1\n    onconnect_listener     moz-extension://cbd583bf-c5d9-9f48-a42b-8c3ace7a778b/background.js:1\n    e                      moz-extension://cbd583bf-c5d9-9f48-a42b-8c3ace7a778b/lpfulllib.js:1\n    apply                  self-hosted:2159\n    applySafeWithoutClone  resource://gre/modules/ExtensionCommon.jsm:614\n    asyncWithoutClone      resource://gre/modules/ExtensionCommon.jsm:2428\n
Run Code Online (Sandbox Code Playgroud)\n

如果我首先将请求存储在变量中,然后返回它,我只会看到以下内容

\n
made it to getaccessToken authorize.js:85:11\nmade it to authorize authorize.js:73:11\nPromise { "pending" }\n\xe2\x80\x8b\n<state>: "pending"\n\xe2\x80\x8b\n<prototype>: PromiseProto { \xe2\x80\xa6 }.   authorize.js:80:11\n\n
Run Code Online (Sandbox Code Playgroud)\n

当我获取创建的内容auth_url并将其添加为按钮的链接时,它将登录屏幕作为新选项卡打开。然后登录时,我会在同一选项卡中收到回调响应,并且我可以在 url 中看到身份验证成功并且也是redirect url正确的。

\n

那么问题似乎是我的弹出窗口收到回调时发生了什么?

\n

这是我的清单 json

\n
{\n    "manifest_version": 2,\n    "name": "Learnify",\n …
Run Code Online (Sandbox Code Playgroud)

javascript firefox-addon google-chrome-extension

6
推荐指数
0
解决办法
875
查看次数