我怎样才能检查另一个窗口中的打开的URL?

这是我的最后一个问题的后续工作如果窗口不存在 , 打开一个窗口基本上,我现在保存一个页面打开的所有窗口引用的列表,并且只允许它们打开尚未开放。 然后,一个潜在的问题让我感到震惊 – 用户当然可能closures原来的窗口,并再次打开,从而失去了窗口引用的列表。

是否有可能循环浏览器中打开的窗口,检查特定的URL?

编辑:在这里(和另一个问题)的许多有用的评论之后,这里是应用程序启动器的最终代码。 本质上,它试图用合适的名称来获得打开窗口的位置。 如果由于隐私问题导致例外,则判定应用程序已经被加载。 如果是“about:blank”,那么这是一个新窗口。 这适用于Firefox,IE7和Google Chrome。 感觉脏…

var g_urlarray = []; Array.prototype.has = function(value) { var i; for (var i in this) { if (i === value) { return true; } } return false; }; function launchApplication(l_url, l_windowName) { var l_width = screen.availWidth; var l_height = screen.availHeight; var winRef; var l_params = 'status=1' + ',resizable=1' + ',scrollbars=1' + ',width=' + l_width + ',height=' + l_height + ',left=0' + ',top=0'; if (g_urlarray.has(l_url)) { winRef = g_urlarray[l_url]; } if (winRef == null || winRef.closed) { winRef = window.open('', l_windowName, l_params); var l_openNew = 0; try { if (winRef.location == 'about:blank') { l_openNew = 1; } } catch (e) { l_openNew = 0; } if (l_openNew === 1) { winRef.location = l_url; winRef.moveTo(0,0); winRef.resizeTo(l_width, l_height); } g_urlarray[l_url] = winRef; } } 

Solutions Collecting From Web of "我怎样才能检查另一个窗口中的打开的URL?"

@annakata(即使你存储他们,你将无权再关闭它们)

不对。 如果你有这个窗口的名字,你可以使用window.open来重新建立一个到窗口的链接,即使这个开启者是关闭并重新打开的。 例如:

 <script> function winOpen(url){ return window.open(url,getWinName(url)); } function winClose(url){ var win = window.open("",getWinName(url)); win.close(); } function getWinName(url){ return "win" + url.replace(/[^A-Za-z0-9\-\_]*/g,""); } </script> <a href="#" onclick="winOpen('http://google.com');return false;">Click me first</a>, close and open this window, then <a href="#" onclick="winClose('http://google.com');return false;">click me to close the other window</a> 

不,这将是一个安全/隐私问题。


由于其他人提出了所有权/ cookie状态存储:只有当你也是打开窗口的同一个文档时,即在用户关闭窗口并重新打开的情况下,这才起作用,这些参考确实会丢失(即使你存储他们,你将无权再关闭它们)

在JavaScript中,只能获得对当前窗口的引用以及使用window.open打开的任何窗口。

你可以检查winRef.closed ,看看用户是否关闭了窗口。 不过,我不确定这是否适用于所有浏览器。

如果给每个窗口一个唯一的窗口名称(window.open的第二个参数),再次调用window.open以相同的窗口名称将打开窗口,如果它关闭,或返回一个引用到现有的窗口,而无需打开一个新的窗口。

你实际上可以用cookies来做,但是如果你问我,你就不会这样做。

设置一个数组,并在打开它们时用窗口引用增加它…

 var wins = new Array(); function openWindow(url) { wins.push(window.open(url)); } 

然后当你想检查窗口的状态,你可以像这样循环他们,并删除没有打开的窗口…

 function updateWindowArray() { for(var i = 0, l = wins.length; i < l; i++) { if(wins[i] == null || wins[i].closed) arrayRemove(wins, i, i + 1); } } function arrayRemove(array, from, to) { var rest = array.slice((to || from) + 1 || array.length); array.length = from < 0 ? array.length + from : from; return array.push.apply(array, rest); } 

最好的祝福…