我目前正在尝试构建像 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 访问 opener 窗口。但由于回调没有暴露给窗口对象,我能做什么?
最佳答案
您无法从弹出窗口执行它。
您必须将其公开到全局范围。例如,为您的库创建一个全局对象并将其附加到该对象。
然后您需要以某种方式检查函数的执行位置。您将通过检查而不是不公开来禁止网站所有者触发该功能。
关于javascript - 如何从 window.opener 执行不暴露于窗口的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15572818/