窗口弹出窗口 - 如何让window.blur()或window.focus()在FireFox 4中工作?

时间:2011-11-03 14:07:05

标签: javascript html firefox popup

我知道FF4不允许使用window.blur(),除非在FF配置中启用了“升高或降低窗口”设置。这很简单,无视事件。

我知道有些网站仍设法打开弹出窗口,并将焦点保持在当前窗口,即使此设置已关闭。他们是如何实现这一目标的?

此外,我不明白为什么.blur()和.focus()在两个页面都位于同一个域时不起作用。根据{{​​3}},这应该有效。

2 个答案:

答案 0 :(得分:6)

这适用于我在Firefox和Chrome中的默认设置(JSFiddle):

function popUnder(url, width, height) {
    var popUnderWin, nav = navigator.userAgent,
        isGecko = /rv:[2-9]/.exec(nav),
        hackString;

    hackString = nav.indexOf('Chrome') > -1 ? "scrollbar=yes" : "toolbar=0,statusbar=1,resizable=1,scrollbars=0,menubar=0,location=1,directories=0";

    popUnderWin = window.open("about:blank", "title", hackString + ",height=" + height + ",width=" + width);

    if (isGecko) {
        popUnderWin.window.open("about:blank").close();
    }

    popUnderWin.document.location.href = url;

    setTimeout(window.focus);
    window.focus();
    popUnderWin.blur();
}

document.getElementById("asd").addEventListener("click", function() {
    popUnder("http://www.google.com", 1024, 768);
}, false);
<div id="asd">click here</div>

如果没有window.open的hacky额外参数,我无法让它工作,所以对他们有所帮助。

答案 1 :(得分:3)

http://support.mozilla.com/en-US/questions/806756#answer-167267

他们说除非每个人都前往about:config并将dom.disable_window_flip设置为false,否则无法实现。

我不知道有任何代码绕过此限制,但我认为其他网站使用的不是window.blur()window.focus()

有一篇类似的文章here