繁体   English   中英

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

[英]Sending mail from Chrome extension using auth 2.0 but stuck at somewhere I don't know

我想从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 ,您将立即发送电子邮件,由于尚未获得令牌,因此电子邮件失败。

将该部分移到回调中,该回调将在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);
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM