2010-03-16 65 views
1

我们使用window.open打开弹出窗口。但是,我们希望找到它并关闭。不幸的是我们不能保存这个弹出句柄给变量。window.open和searchpopop

P.S.如何获得所有窗口的列表?

+1

为什么你不能将弹出句柄保存到变量?我的意思是,这显然是迄今为止最简单的解决方案。 – Pointy 2010-03-16 14:26:02

回答

1

这应该工作:

var wh = window.open(..) 

WH是手柄的弹出窗口。

+3

你会注意到这个问题神秘地声称他们不能这样做。 – Pointy 2010-03-16 14:26:43

+0

是的,而不是。 A没有可能的保存处理程序 – 2010-03-16 14:28:01

+0

你是什么意思?你为什么不能保存这个句柄?有什么问题? – Andrey 2010-03-16 14:29:15

0

如果您可以控制加载脚本的页面,则可以这样做。 警告:这是做一个真正可怕的,一般坏事:

<script> 
    var windowHandles = {}; 
    (function() { 
    var realOpen = window.open; 
    window.open = function(url, name, features) { 
     windowHandles[name] = realOpen(url, name, features); 
    }; 
    })(); 
</script> 

,将建立一个对象(windowHandles),其中每个把手打开的窗口将被保存。

将该脚本放入您的页面之前打开其他窗口的脚本已加载。

+0

你是对的,这是一个非常糟糕的解决方案 - 昨天我花了两个小时在一个特定的页面上用String.split()调试客户端的问题,发现一些聪明的屁股已经覆盖了这个标准的javascript函数。 但是,如果你真的不能修改脚本,绝对不得不使用它,我可能会去为它:) – Andrey 2010-03-16 14:50:53

0

我不喜欢这个解决方案。修复脚本给你一个处理将是一个更好的选择。

<button onclick="go()">Go</button> 
<button onclick="stop()">Stop</button> 

<script type="text/javascript"> 

    function go() { 
      // Existing function. It opens a window with a name. 
      window.open('http://google.com', 'test', 'width=300,height=300'); 
    } 

    var foo; 

    function stop() { 
      // Open a new window with the same name. It replaces the existing window. 
      // Since it opens a local document, the Same Origin Policy does not apply. 
      // ... and we can capture its return value to grab a handle on an existing 
      // window 
      foo = window.open('black-local-page.html', 'test', 'width=300,height=300'); 
      // Give the local page time to load 
      setTimeout(continue_stopping, 500); 
    } 

    function continue_stopping() { 
      // Call window.open() on the window 
      foo.close(); 
    } 

</script> 
+0

只要名称是有用的,或多或少是唯一的,对吗? – Pointy 2010-03-16 14:42:46

+0

我不明白这个,你能解释一下吗? – Andrey 2010-03-16 14:53:21

+0

@Pointy - 名称必须是唯一的。 – Quentin 2010-03-16 15:06:11

0

我发现并不完美的解决方案,但它的工作。

win = window.open(null, 'Window1'); 

这个名字这段代码搜索的搜索窗口,返回处理程序,但如果在窗口被关闭它打开空的弹出窗口。 我认为这是临时解决方案