window.open 出现在 webkit 浏览器后面,但如果我打开 facebook 或 twitter 页面则不会?

Posted

技术标签:

【中文标题】window.open 出现在 webkit 浏览器后面,但如果我打开 facebook 或 twitter 页面则不会?【英文标题】:window.open appearing behind webkit browsers, but not if I open a facebook or twitter page? 【发布时间】:2011-08-24 11:01:30 【问题描述】:

我正在使用window.open()打开

http://twitter.com/share.. 和 http://www.facebook.com/sharer.php...

允许用户发布到他们的 Facebook 或 Twitter 帐户。

这些弹出窗口正确显示在我当前的 Chrome 或 Safari 窗口的前面。

但是,当我将 URL 更改为当前域上的另一个页面时,弹出窗口出现在当前窗口的后面而不是在前面!?相同的代码,相同的打开窗口的函数,只是传递给 window.open() 的 URL 不同。

我不知道为什么,我已经尝试了所有方法,注释掉了弹出页面中的任何 javascript 或任何可能导致 Chrome/Safari 认为它是恶意的内容。

这些浏览器是否将 URL 检测为 Facebook/Twitter 并允许它出现在前面,而将其他内容推到后面?

这是我的开窗功能

InfoOverlay.prototype.popupWindow = function(url, title, width, height) 

    var left = (screen.width/2) - (width/2);
    var top = (screen.height/2) - (height/2);
    var targetWin = window.open(
        url, 
        title, 
        'toolbar=no, location=no, directories=no, alwaysRaised=yes, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=' + width + ', height=' + height + ', top=' + top + ', left=' + left
    );

    // These 2 lines added on suggestion from commenter below 
    // (doesn't fix issue)
    targetWin.blur();
    targetWin.focus();

【问题讨论】:

【参考方案1】:

可能是您打开的那些页面中有代码来集中注意力(例如 window.focus();)

您应该能够在弹出窗口的页面中的代码中执行此操作,只需确保为窗口命名,然后执行 WindowName.focus();

这个 html 中的快速模型似乎适用于 IE9、Chrome、FF4,但不适用于 Safari(我有 Windows 上的 3.x)

<script>
var myWin
</script>
<button onclick="myWin = window.open('about:blank', 'foo', 'height=200,width=200,modal=yes,alwaysRaised=yes');">Show Window</button>
<button onclick="myWin.blur();">Blur</button>
<button onclick="myWin.focus();">Focus</button>

【讨论】:

你最初尝试过,不高兴。出于安全原因,我前段时间在某处阅读了他们阻止 .focus() 的内容。 作为对您的编辑的回复,我已将我的代码放入原始帖子中,以向您展示我的代码仍然无法将其置于最前面(但传递给它的 Twitter 和 Facebook URL 没有问题)。

以上是关于window.open 出现在 webkit 浏览器后面,但如果我打开 facebook 或 twitter 页面则不会?的主要内容,如果未能解决你的问题,请参考以下文章

IE浏览器在弹出窗口时提示:不支持此接口 window.open()方法是啥原因,以前用得挺好的

window.open被浏览器拦截的解决方案

window.open浏览器弹出新窗口被拦截—原因分析和解决方案

javascript使用window.open(url)方式实现下载文件功能,但却有时不能弹出下载框?

window.showModalDialog更换window open兼容主流浏览器

window.open新打开窗口与新开标签页