javascript - 如何从 window.opener 执行不暴露于窗口的函数?

标签 javascript authentication oauth

我目前正在尝试构建像 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/

相关文章:

javascript - 谷歌浏览器 - 这是 BUG 吗? Javascript 问题?触摸屏输入不工作

asp.net - session变量清除方法只会清除当前浏览器session吗?

linux - Elementary OS - Hera 5.1 - 无法登录 - "Session returned error code 1"- 意外删除了时代精神*

api - 通过 Paypal Oauth 检索从用户收到的付款?

javascript - .toggle ("bounce") 使 div 消失

javascript - 移动标题不可点击

javascript - ko.utils.arrayFilter 无法正常工作

.net - 如何在 .Net HTTPListener Google Chrome 问题中为基本身份验证方案设置领域

php - 在 Magento 中创建一个新客户(RESTful,PHP)

http - WebTestPlugin 和 Http 请求参数(Visual Studio 测试)