如何从窗口执行未暴露给窗口的函数?



我目前正在尝试构建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的开发版本揭示了跨窗口消息传递的使用。

最新更新