如果我写一个chrome扩展名,它通常由多个部分组成:
一个是 devtools页面,这是一个普通的HTML页面,其原点设置为 “铬延伸://< GUID> /文件名”。在那个页面我可以使用 Dropbox API通过HTML弹出窗口获取用户确认然后使用 保存的身份验证信息,并通过Dropbox javascript库完成所有工作。
扩展的另一部分是执行的内容脚本 在指定的第三方网页(“注入”)的上下文中 与他们共享的原始cookie和网络存储。
是否可以在该内容脚本中使用Dropbox JavaScript库?
我无法以交互模式呼叫authenticate
,因为它会重新询问我注入的每个不同网页的确认。并且在没有交互的情况下调用authenticate
将失败,因为内容脚本不与devtools扩展页面共享源,cookie和web存储:(。也许有一些方法来“传递”部分的Dropbox身份验证信息提供GUI的扩展程序,以及用户成功确认扩展程序使用的扩展程序部分的内容,如内容脚本或后台页面?
答案 0 :(得分:4)
我已经设法让Facebook通过内容脚本从注入Web应用程序的代码中运行。我怀疑有多种方法,但我所做的是利用chrome.identity API为我做OAuth工作,特别是launchWebAuthFlow()
。
这只能在后台页面(在我的情况下是一个事件页面)中完成,但是我将消息发送到回复access_token
的事件页面,然后可以在同一个URL中使用作为'web'技术 - 即在使用XHR的HTTP请求中。
您可以通过内容脚本发送/接收消息(使用document
上的事件),但我决定在网络应用环境中使用directly using "external" messages API chrome.runtime.sendMessage()
进行处理,并且后台脚本中的chrome.runtime.onMessageExternal()
。这需要在manifest.json的"externally_connectable"
部分为您注入代码的URL添加“匹配”。
我相信这可以使其适用于Dropbox。