我已经阅读了很多帖子,但他们似乎都没有回答我的确切问题。
是否可以检测由target="_blank"
attr打开的标签页?
我需要一个新的标签/窗口打开,用户将选择一个选项,然后标签关闭。
当该标签关闭时,我需要刷新原始窗口(父窗口或开启窗口)。
有什么想法吗?
修改
进一步解释
我有一个应用程序在iframe中打开另一个应用程序。 iframe中的应用程序开放连接到社交媒体以发布共享。打开的新选项卡用于身份验证/ oauth舞蹈。在主窗口中打开的页面显示已连接的帐户,并允许您连接新帐户(在iframe的主窗口中)。 authentication / oauth打开一个新的窗口/标签来进行舞蹈,然后它自己关闭。我需要父窗口(其中包含iframe的主窗口)才能知道新标签/窗口已关闭,因此它可以刷新内容并反映新连接。
最终说明 我使用了很多身份验证方法,所以上面的内容实际上是无关紧要的。
我只需要找到一种方法来监视已经打开的新选项卡/窗口,或者甚至让新窗口/选项卡触发浏览器事件onunload到父/主窗口知道它关闭以便它可以刷新。 / p>
答案 0 :(得分:3)
因此,如果有人感兴趣,我现在就可以使用它,直到找到更好的解决方案。
首先我做的是让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);
}
}
}
}
每秒检查窗口并不是最好的或最好的做法,但是现在它会起作用,直到找到更好的解决方案。
答案 1 :(得分:0)
这是有效的example(http://jsfiddle.net/sureshpattu/w8x7dqxr/)和代码
HTML
<button class="openPopActBtn">Open pop window </button>
JavaScript
var checkWindow = false;
var fbAuthWindow;
$('.openPopActBtn').click(function() {
openFBAuth('www.google.com');
});
function openFBAuth(url) {
fbAuthWindow = window.open(url);
checkWindow = true;
setTimeout(function() {
checkAuthWindow('fb');
}, 1000);
}
function checkAuthWindow(win) {
if (checkWindow == true) {
if (win == 'fb') {
if (fbAuthWindow.closed) {
window.location.reload();
} else {
setTimeout(function() {
checkAuthWindow('fb');
}, 1000);
}
}
}
}