JavaScript - 参考浏览器窗口的名称?

Jak*_*son 8 javascript

当您创建一个新的浏览器窗口时,您传递一个如下名称:

myWindow = window.open('http://www.google.com', "googleWindow");
Run Code Online (Sandbox Code Playgroud)

稍后您可以从保存它的变量访问该窗口:

myWindow.close();
Run Code Online (Sandbox Code Playgroud)

是否可以通过它的名称(googleWindow)而不是变量来访问和操作窗口?

如果不可能,那么给出Windows名称的重点是什么?

Lin*_*iel 18

没有参考窗口,您无法通过名称或其他方式再次找到它.没有窗户的集合.

更新:以下是您自己可以做到的方法:

var windows = {};
function openWindow(url, name, features) {
    windows[name] = window.open(url, name, features);
    return windows[name];
}
Run Code Online (Sandbox Code Playgroud)

现在,openWindow将始终打开窗口,如果窗口已经存在,它将在该窗口中加载给定的URL并返回对该窗口的引用.现在你也可以实现findWindow:

function findWindow(name) {
    return windows[name];
}
Run Code Online (Sandbox Code Playgroud)

如果它存在,将返回窗口,或undefined.

您也应该拥有closeWindow,因此您不会保留对您自己打开的窗口的引用:

function closeWindow(name) {
    var window = windows[name];
    if(window) {
        window.close();
        delete windows[name];
    }
}
Run Code Online (Sandbox Code Playgroud)

如果不可能,那么给出Windows名称的重点是什么?

该名称由浏览器在内部用于管理窗口.如果window.open使用相同的名称进行呼叫,则不会打开新窗口,而是将URL加载到先前打开的窗口中.还有一些东西,来自MDN window.open():

如果已存在名为strWindowName的窗口,则strUrl将加载到现有窗口中.在这种情况下,方法的返回值是现有窗口,并忽略strWindowFeatures.为strUrl提供空字符串是一种通过名称获取对打开窗口的引用而不更改窗口位置的方法.要在每次调用window.open()时打开一个新窗口,请为strWindowName使用特殊值_blank.


Mar*_*ain 14

Linus G Thiel说你不能用javascript做到这一点.奇怪的是,他的答案列出了MDN的一段摘录,听起来它告诉了如何做到这一点.这条线是:

 "Providing an empty string for strUrl is a way to get a reference to
  an open window by its name without changing the window's location."
Run Code Online (Sandbox Code Playgroud)

我试过这个,它对我有用.

 winref = window.open('', 'thatname', '', true);
 winref.close();
Run Code Online (Sandbox Code Playgroud)

但是,这可能仅在您从页面打开窗口时才有效.如果这是真的,那么做一个窗口是没有意义的.打开只是为了得到参考.在这种情况下,您可能已经有了参考.

  • 它实际上不是基于谁打开它,而是基于页面共享的来源或域. (2认同)