我已经阅读过window.opener,但它似乎对我没用。
基本思路:打开弹出窗口,让用户登录oauth2系统。(谷歌,盒子等) 我所关心的只是获取网址,因为它具有访问令牌,令牌类型和到期日期。
使用此代码,谷歌网址打开正常,我可以登录(并关闭弹出窗口),但无法将网址传递给其他方法。
按钮上的处理程序点击:
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 :(得分:0)
试
if (win.document.URL.indexOf(redirect_uri) != -1) {
window.clearInterval(pollTimer);
var d = win.document.URL;
win.close();
dfd.resolve(d);
}