我们使用window.open打开弹出窗口。但后来我们想找到并关闭。不幸的是,我们无法将此弹出句柄保存为变量。
P.S。如何获取所有窗口的列表?
答案 0 :(得分:1)
这应该有效:
var wh = window.open(..)
wh是弹出窗口的句柄。
答案 1 :(得分:0)
如果您可以控制加载脚本的页面,则可以执行以下操作。 警告:这是一件非常可怕且通常不好的事情:
<script>
var windowHandles = {};
(function() {
var realOpen = window.open;
window.open = function(url, name, features) {
windowHandles[name] = realOpen(url, name, features);
};
})();
</script>
这将构建一个对象(windowHandles
),其中将保存每个打开窗口的句柄。
在之前将该脚本放入页面打开另一个窗口的脚本。
答案 2 :(得分: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>
答案 3 :(得分:0)
我发现不是完美的解决方案,但它有效。
win = window.open(null, 'Window1');
此代码搜索搜索窗口具有此名称和返回处理程序,但如果窗口关闭则打开空弹出窗口。 我认为这是暂时的解决方案