我使用chrome.identity.launchWebAuthFlow()
指导用户在使用我的扩展程序时通过非Google API的OAuth2。
即使身份验证有效且我可以有效地获取用户的身份验证令牌,但我不喜欢它完全在缺少浏览器UI和URL栏的新窗口中打开。
理想情况下,我可以在扩展程序的弹出窗口中进行此OAuth舞蹈。如果这不起作用,至少能够在单独的标签中进行此OAuth事件是另一种解决方案。
现在,用户将点击扩展程序以打开弹出窗口。在弹出窗口中,有一个按钮,他们将单击以激活OAuth。从这里开始,会弹出另一个窗口,但我希望它能够保留在弹出窗口中(见上文)。
我怎样才能实现这一目标?我已经看过很多关于它的讨论,但没有解决方案。
谢谢!
的manifest.json
{
"manifest_version": 2,
"name": "Extension",
"version": "0.0.1",
"permissions": [
"identity",
"tabs",
"http://*/*",
"https://*/*"
],
"browser_action":{
"default_icon": "icon.png",
"default_popup" : "popup.html"
},
"background": {
"scripts": ["background.js"]
}
}
background.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse){
if( request.message==="start_oauth"){
chrome.identity.launchWebAuthFlow(
{
"url" : "https://example.com/manage/oauth2/authorize?callback_uri="
+encodeURIComponent(<callback_uri>)
+"&client_id=" + <client_id>
+"&response_type=code",
"interactive" : true
},
function(redirect_url){
var auth_token = redirect_url.substr(<callback_uri>.length+6);
}
);
}
}
);
popup.js
function startOAuth(){
chrome.runtime.sendMessage({"message": "start_oauth"});
}
document.getElementById("login").addEventListener("click", startOAuth);
popup.html
<html>
<body>
<button id="login"> Click here to log in</button>
</body>
<script src="popup.js"></script>
</html>