我目前正在玩构建类似 Mozilla Persona 的东西。到目前为止,我已经构建了这个:
(function()
{
var loginFailedCallback = function(){};
var loginSuccessCallback = function(){};
var MyId = {
Request: function(fail, success)
{
loginFailedCallback = fail;
loginSuccessCallback= success;
window.open("oauth.html", 'test', "width=650,height=280,location=0,menubar=0,resizable=0,scrollbars=0,status=0,toolbar=0");
}
};
window.MyId = MyId;
})();
如您所见,我创建了一个对象,站点所有者可以使用它来向用户请求身份验证过程。这两个回调不会暴露给全局命名空间,因此它们不会被站点所有者代码(或控制台)触发。
但是问题在于:如何从弹出窗口中执行这些回调?我知道我可以使用 window.opener 访问开启器窗口。但是由于回调没有暴露给窗口对象,我该怎么办?