1

我目前正在玩构建类似 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 访问开启器窗口。但是由于回调没有暴露给窗口对象,我该怎么办?

4

2 回答 2

0

您无法从弹出窗口中执行它。

您必须将其公开给全局范围。例如,为您的创建一个全局对象并将其附加到该对象。

然后,您将需要以某种方式检查函数的执行位置。您将禁用网站所有者通过检查而不是不公开来触发该功能。

于 2013-03-22T15:50:13.697 回答
0

对 Mozillas Persona的开发版本的研究揭示了Cross-Window Messaging的使用。

于 2013-03-22T16:09:13.640 回答