Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在GoogleChrome中,如何使用父窗口中的javascript将现有的弹出窗口置于前端?_Javascript_Google Chrome_Popup - Fatal编程技术网

在GoogleChrome中,如何使用父窗口中的javascript将现有的弹出窗口置于前端?

在GoogleChrome中,如何使用父窗口中的javascript将现有的弹出窗口置于前端?,javascript,google-chrome,popup,Javascript,Google Chrome,Popup,我希望网页上的按钮具有以下行为: 第一次单击时,打开一个弹出窗口 在以后的单击中,如果弹出窗口仍然打开,只需将其放在前面。如果没有,请重新打开 下面的代码适用于Firefox(Mac和Windows)、Safari(Mac和Windows)和IE8。(我还没有测试IE6或IE7。)然而,在谷歌Chrome(Mac和Windows)中,后来的点击并没有按照预期将现有的弹出窗口带到前台 我如何在Chrome中工作 <head> <script type="text/java

我希望网页上的按钮具有以下行为:

  • 第一次单击时,打开一个弹出窗口
  • 在以后的单击中,如果弹出窗口仍然打开,只需将其放在前面。如果没有,请重新打开
下面的代码适用于Firefox(Mac和Windows)、Safari(Mac和Windows)和IE8。(我还没有测试IE6或IE7。)然而,在谷歌Chrome(Mac和Windows)中,后来的点击并没有按照预期将现有的弹出窗口带到前台

我如何在Chrome中工作

<head>
  <script type="text/javascript">
    var popupWindow = null;
    var doPopup = function () {
      if (popupWindow && !popupWindow.closed) {
        popupWindow.focus();
      } else {
        popupWindow = window.open("http://google.com", "_blank",
          "width=200,height=200");
      }
    };
  </script>
</head>

<body>
  <button onclick="doPopup(); return false">
    create a pop-up
  </button>
</body>

var popupWindow=null;
var dopoup=函数(){
如果(popupWindow&!popupWindow.closed){
popupWindow.focus();
}否则{
popupWindow=窗口。打开(“http://google.com“,”空白“,
“宽度=200,高度=200”);
}
};
创建一个弹出窗口

背景:我特别要求谷歌浏览器,因为我认为我的代码至少解决了其他现代浏览器和IE8的问题。如果有这样做的首选礼仪,请让我知道。

为什么不在window.open调用之后执行popopWindow.focus()?在那里也这样做不会有什么坏处,而且应该确保您的新窗口显示在当前窗口的顶部。

您不能。由于安全原因,Chrome中的Window.focus被禁用,这不太可能改变


您必须关闭并重新打开相应的窗口。

您需要将原始窗口设置为模糊,将新窗口设置为聚焦

var popup = {  //popup = object literal representing your popup
    execute = (function () {
        popup.win = window.open();
        popup.win.focus();
    }());
};
window.blur();

在onclick处理程序中调用时,以下代码适用于我:

var popup = window.open('', 'popup-name', 'resizable,width=480=height=575');

if(popup.location == 'about:blank') {
    popup.location = 'http://google.com';
    return;
}

此代码通过尝试访问弹出窗口的位置来工作,如果其about:为空,则为新弹出窗口,并且设置了url。否则,如果具有相同名称“popup name”的窗口已打开,则弹出窗口将成为焦点。此代码确实需要从onclick处理程序调用,否则它将无法工作。

从今天起,只需对弹出窗口的引用调用focus()即可工作,并将窗口带到最前面。我使用的是Chrome版本62

当前代码会在新窗口中产生所需的行为(即在顶部弹出)——问题在于现有窗口。我不确定我是否理解此代码,但与Chris在上面的评论一样,它似乎可以确保弹出窗口在第一次打开时是集中的,但是没有做任何事情来集中在以后的按钮点击上。这是正确的。JavaScript没有“始终在顶部”的方法可用,也永远不会有这样的方法。当您在弹出窗口外单击时,它将失去焦点并落在接收焦点的窗口后面。改变这一点的唯一方法是点击返回弹出窗口。这种方法不再适用于较新版本的Chrome(21+)看起来这个问题是在大约1.5年前报告的:噢,太令人沮丧了。出于好奇,安全问题是什么?我看到了一些关于相关推理的讨论,尽管这似乎更多地是关于弹出窗口从父窗口窃取焦点,而不是父窗口将焦点提供给弹出窗口(这就是我正在寻找的)。谢谢我还想知道其中涉及的问题。经过这么多年,这仍然是用户的一大挫折,更不用说开发人员了。如果有人能提供一个能很好地解释原因的链接,那就太好了,因为“出于安全考虑”听起来像是火车公司在实施一些显然不是的权宜之计时说的“为了乘客的利益”。最基本的是,因为a型孔会在前面弹出窗口来点击广告。除非网络不是由广告驱动的,否则这就是我们生活的网络。@Michael Cole:Amen;)不仅如此——他们可以把它放在前面,而你无法关闭它,当你关闭窗口时它会重新打开——直到你点击该f*ing add(或恶意软件)。