gpt4 book ai didi

javascript - 使用 auth 2.0 从 Chrome 扩展程序发送邮件,但卡在我不知道的地方

转载 作者:行者123 更新时间:2023-11-28 00:01:40 25 4
gpt4 key购买 nike

我想从 Chrome 扩展程序发送电子邮件,用户必须在扩展程序弹出窗口中输入收件人的电子邮件地址,当前打开的选项卡的链接将发送到输入的电子邮件地址,但我陷入困境身份验证部分,它要求输入我的电子邮件的密码,如所示。

我输入后,它会重新加载同一页面,而不是发送邮件。请帮助我解决我出错的地方。该代码适用于 popup.js 页面。

document.addEventListener('DOMContentLoaded', function () {
document.querySelector('button').addEventListener('click', getCurrentTabAndUrl);

});

function getCurrentTabAndUrl() {

chrome.tabs.getSelected(null, function(tab) {

var tabId = tab.id;
var tabTitle=tab.title;
var tabUrl = tab.url;
if (tabUrl=="chrome://newtab/") {
document.getElementById("data").innerHTML="Looks like you opened a new tab, please open a web page and click again to Share.";
}else {
document.getElementById("data").innerHTML="subject="+tabTitle+'<br/>'+tabUrl;

var to=document.getElementById("to").value;


sendMessage('me',to,tabTitle,tabUrl);

}
});
}


function sendMessage(userId,to,subject,email) {

authUser();

var base64EncodedEmail = btoa(email);

var request = gapi.client.gmail.users.messages.send({

'userId': userId,

'message': {
'raw': base64EncodedEmail,

"headers":[
{"To":to},
{"Subject":subject}
]
}
});

request.execute();

}

function authUser(){

chrome.identity.getAuthToken(
{'interactive': true},
function(token){
// load Google's javascript client libraries
var url="https://www.googleapis.com/gmail/v1/users/me/messages/send?access_token="+token;
var request = new XMLHttpRequest();

request.onreadystatechange = function(){
if(request.readyState !== 4||request.status !== 200) {
return;
}

var response=JSON.parse(request.responseText);
console.log(response);

};
request.open('POST', url,true);

request.send();
request.setRequestHeader('Authorization','Bearer ' + token);
});

}

最佳答案

调用 authUser()(它调用异步 API chrome.identity.getAuthToken)后,您立即发送电子邮件,因此由于尚未获取 token 而失败。

将该部分移动到回调中,该回调将在 getAuthToken 完成后执行:

function sendMessage(userId, to, subject, email) {
authUser(function() {
var base64EncodedEmail = btoa(email);
var request = gapi.client.gmail.users.messages.send({
'userId': userId,
'message': {
'raw': base64EncodedEmail,
'headers': [
{'To': to},
{'Subject': subject}
]
}
});
request.execute();
});
}

function authUser(callback) {
chrome.identity.getAuthToken({'interactive': true}, function(token) {
// load Google's javascript client libraries
var url = "https://www.googleapis.com/gmail/v1/users/me/messages/send?access_token=" + token;
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState !== 4 || request.status !== 200) {
return;
}
var response = JSON.parse(request.responseText);
console.log(response);
callback();
}
;
request.open('POST', url, true);
request.send();
request.setRequestHeader('Authorization', 'Bearer ' + token);
});
}

关于javascript - 使用 auth 2.0 从 Chrome 扩展程序发送邮件,但卡在我不知道的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31741960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com