检测从父(打开器)关闭的新选项卡
Detect new tab closing from parent(opener)
我读了一堆帖子,但似乎没有一个能准确回答我的问题。
是否有可能检测到由target="_blank"
attr打开的选项卡关闭?
我需要一个新的标签/窗口打开,用户将选择一个选项,然后标签关闭。
当该选项卡关闭时,我需要原始窗口(父窗口或打开器)刷新。
任何想法?
编辑:进一步解释
我有一个应用程序打开另一个应用程序在iframe。iframe中打开的应用程序连接到社交媒体,用于发布共享。打开的新选项卡用于身份验证/oauth。主窗口中打开的页面显示已连接的帐户,并允许您连接新帐户(在iframe的主窗口中)。身份验证/oauth打开一个新窗口/选项卡来执行舞蹈,然后关闭自己。我需要父窗口(主窗口与iframe在其中)知道,新的选项卡/窗口关闭,所以它可以刷新内容和反映新的连接。
遗言strong>我使用了很多身份验证方法,所以上面的内容真的是无关紧要的。
我只需要找到一种方法来监控新标签/窗口已经打开,甚至有新的窗口/标签触发一个浏览器事件onunload,父/主窗口知道它关闭,所以它可以刷新。
所以如果有人感兴趣,这就是我现在的工作方式,直到我找到一个更好的解决方案。
首先,我做的是让javascript打开我的窗口,将其分配给一个变量,因此它有一个引用名称。
var checkWindow = false;
var fbAuthWindow;
function openFBAuth(url) {
fbAuthWindow=window.open(url);
checkWindow = true;
setTimeout(function() { checkAuthWindow('fb'); }, 1000);
}
还设置了一个超时,每秒钟运行一次,而checkWindow == true
检查窗口是否关闭。如果窗口被关闭(我的脚本在身份验证完成时关闭窗口),则页面重新加载,最终将checkWindow
设置为false。
function checkAuthWindow(win){
if(checkWindow == true){
if(win == 'fb'){
if(fbAuthWindow.closed){
window.location.reload();
} else {
setTimeout(function() { checkAuthWindow('fb'); }, 1000);
}
}
}
}
它不是最漂亮的,也不是最好的做法,每秒钟检查一次窗口,但现在它会工作,直到我找到一个更好的解决方案。
下面是工作示例(http://jsfiddle.net/sureshpattu/w8x7dqxr/)和代码