繁体   English   中英

当它失去焦点时关闭弹出窗口

[英]Closing a pop up window when it loses focus

我想知道是否可以使用javascript创建一个弹出窗口,然后在它失去焦点时关闭该窗口。

这是我的代码:

    var theWindow;


function launchWindow() {
            theWindow=window.open('www.domain.com');

          theWindow.onblur = function() {
                this.close();
        };
}

但这根本不起作用。 有什么建议么?

编辑:我发现了一个适合我的解决方案,希望它能为其他人工作:

var theWindow;
var windows = [];


function launchWindow() {
            theWindow=window.open('www.domain.com');

            windows.push(theWindow);

            window.onfocus = function() {
                for (x in windows) {
                    windows[x].close();
                }
            };
}

它不是我原始问题的精确解决方案(当它失去焦点时它不会关闭窗口,而是在主窗口重新获得焦点时关闭它)但它对我有效。

弹出窗口的URL是否与父对象的域相同? 如果没有,您可能无法将事件附加到新窗口的onblur事件。

在查看StackOverflow时从浏览器控制台运行此命令,以确保当弹出窗口与原始窗口位于同一域时,它确实有效:

var theWindow = window.open ("http://www.stackoverflow.com","theWindow");
theWindow.onblur = function() { this.close(); };

window没有onblur事件

尝试通过关注主窗口的<body>来调用它

您可能遇到的问题是您在窗口开始加载页面之前绑定了onblur处理程序。 加载页面后,您的onblur处理程序就会消失。 您需要延迟绑定足够长的时间,以便在绑定事件处理程序之前为页面提供开始加载的机会:

function launchWindow() { 
    var theWindow = window.open('www.domain.com'); 
    setTimeout(function() {
        theWindow.onblur = function() { 
            this.close();
        };
    }, 2000); 
} 

如果要在其他域中加载页面,则根本无法绑定onblur处理程序。 你需要使用onfocus坚持你的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM