2017-08-09 78 views
0

我已阅读关于window.opener的信息,但它似乎对我无效。 (谷歌,框等) 所有我从那里关心,得到的URL,因为它有访问令牌,令牌类型和到期。oauth在弹出窗口中登录后将控制权交还给父窗口

使用此代码,谷歌网址打开罚款,我可以登录(并关闭弹出窗口),但不能将URL传递给其他方法。

按钮点击

处理程序:

var url = "https://accounts.google.com/o/oauth2/v2/auth?scope="+ scope + 
"&redirect_uri="+ redirect_uri + 
"&response_type=token&client_id=" + client_id; 

this.oauthSignIn(url, redirect_uri).then(
lang.hitch(this, function (data) { 
    console.log("here 0 " + data); 
    this._getTokenValue(data, 'access_token').then(function (data1) { 
    console.log("here 2 " + data1); 
    }); 
}), 
); 

CONSOLE.LOG打印效果与预期的网址,但同样的“数据”不能传递到this_getTokenValue不管我怎么努力。

this.oauthSigin:

oauthSignIn: function(url, redirect_uri) { 
var dfd = new Deferred(); 
var win = window.open(url, "_blank", 'width=800, height=600'); 
var pollTimer = window.setInterval(function() { 
    try { 
    if (win.document.URL.indexOf(redirect_uri) != -1) { 
    window.clearInterval(pollTimer); 
    win.close(); 
    dfd.resolve(win.document.URL); 
    } 
    } catch(e) { 
} 
},100); 
return dfd; 
} 

我不能似乎永远能够通过URL这此功能。

_getTokenValue: function(url, name) { 
    var dfd = new Deferred(); 
    name = name.replace(/[[]/,"\[").replace(/[]]/,"\]"); 
    var regexS = "[\?&]"+name+"=([^&#]*)"; 
    var regex = new RegExp(regexS); 
    var results = regex.exec(url); 
    if(results == null) 
     dfd.resolve(""); 
    else 
     dfd.resolve(results[1]); 

    console.log("here1 " + results); 
    return dfd; 
}, 

任何帮助指针?

回答

0

尝试

if (win.document.URL.indexOf(redirect_uri) != -1) { 
    window.clearInterval(pollTimer); 
    var d = win.document.URL; 
    win.close(); 
    dfd.resolve(d); 
} 
+0

没有工作:( – Dhrumil