Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在弹出窗口关闭后激发的事件_Javascript_Html_Javascript Events - Fatal编程技术网

Javascript 在弹出窗口关闭后激发的事件

Javascript 在弹出窗口关闭后激发的事件,javascript,html,javascript-events,Javascript,Html,Javascript Events,我正在为我工作的公司创建单一登录服务。它必须有自己的JavaScript库,就像Facebook为oAuth服务提供的一样。我无法检测窗口何时关闭,以便实现故障处理程序 我尝试过使用window.onunload,但当您登录文档时,会卸载,然后window.onunload会启动。我试图找到一种方法来检查是否有一种方法来检查窗口是否处于关闭状态。不过我没怎么幸运找到它 之后,我尝试使用window.closed检查窗口是否已经关闭。这不起作用,因为window.onunload事件在窗口关闭之前

我正在为我工作的公司创建单一登录服务。它必须有自己的JavaScript库,就像Facebook为oAuth服务提供的一样。我无法检测窗口何时关闭,以便实现故障处理程序

我尝试过使用window.onunload,但当您登录文档时,会卸载,然后window.onunload会启动。我试图找到一种方法来检查是否有一种方法来检查窗口是否处于关闭状态。不过我没怎么幸运找到它

之后,我尝试使用window.closed检查窗口是否已经关闭。这不起作用,因为window.onunload事件在窗口关闭之前激发

我查看了Mozilla开发者网络wiki上的window对象,发现了window.close事件。我试过了,但不知什么原因,它不着火

到目前为止我已经实现的代码:

弹出-登录:

window.onunload = function (e) {
    try {
        window.opener.postMessage([false], '*');
    } catch (e) {}
};
弹出-登录成功:

window.opener.postMessage([true, 'data' ], '*');
window.close();
开场白:

var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent, function (e) {
    if (e.data[0]) {
        this._data = JSON.parse(e.data[1]);
        return _fireEvent('success', e.data[1]);
    } else {
        if (win.CLOSED)
            return _fireEvent('failure');
    }
}, false);

这是一个类似的问题。查看此处建议的答案是否有助于您解决问题。

什么是win.CLOSED?window.open的返回值中存在一个名为closed的只读属性,但该属性都是小写的。您可以使用setTimeout来检测弹出窗口何时关闭;当win.closed为false时,其中win是window.open.win.closed的返回值,它确实是您在window.open返回值上谈论的属性。win变量保存window.open调用的返回值,该调用打开弹出窗口。VisualStudioIntelliSense表示,该房产将全部位于上层。这可能是我的一个错误。我也考虑过这个选项,但对我来说,这似乎是一个肮脏的选项,所以我想问是否有更好的选项。这个问题的主要答案是基于@Rob W在我的问题的评论中直接提出的相同内容。