我目前正在尝试构建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打开打开器。但是由于回调没有暴露给window对象,我能做什么呢?
你不能从弹出窗口执行。
必须将其暴露给全局作用域。例如,为库创建一个全局对象,并将其附加到该对象。
那么你需要以某种方式检查函数执行的位置。您将通过检查禁用站点所有者来触发该功能,而不是通过不暴露它。
Mozillas Persona的开发版本揭示了跨窗口消息传递的使用。