JavaScript window.open只有当窗口不存在时

我有一个应用程序,点击一个链接打开一个新的窗口。 这产生了一个包含Java小程序的页面。 我遇到的问题是单击相同的链接重新加载页面,这将重置Java应用程序。 有什么办法来捕捉这个? 两个可以接受的解决scheme是:

  1. 允许从点击处理程序打开多个窗口
  2. 如果窗口已经打开,则忽略后续请求

作为一个Javascript新手道歉 – 这不是我的主要事情。

附加到处理程序的代码是

function launchApplication(l_url, l_windowName) { var l_width = screen.availWidth; var l_height = screen.availHeight; var l_params = 'status=1' + ',resizable=1' + ',scrollbars=1' + ',width=' + l_width + ',height=' + l_height + ',left=0' + ',top=0'; winRef = window.open(l_url, l_windowName, l_params); winRef.moveTo(0,0); winRef.resizeTo(l_width, l_height); } 

编辑:

感谢您的答复 – 我稍微修改了一些build议,以便可以通过该function打开多个URL。

编辑2:有这个代码的另一个版本检查在另一个窗口上打开的URL

 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]; } alert(winRef); if (winRef == null || winRef.closed) { winRef = window.open(l_url, l_windowName, l_params); winRef.moveTo(0,0); winRef.resizeTo(l_width, l_height); g_urlarray[l_url] = winRef; } } 

我会这样做 – 基本上存储所有引用打开的窗口上的函数本身。 当函数触发时,检查窗口是否存在或已经closures – 如此,启动popup窗口。 否则,请关注该请求的现有popup窗口。

 function launchApplication(l_url, l_windowName) { if ( typeof launchApplication.winRefs == 'undefined' ) { launchApplication.winRefs = {}; } if ( typeof launchApplication.winRefs[l_windowName] == 'undefined' || launchApplication.winRefs[l_windowName].closed ) { var l_width = screen.availWidth; var l_height = screen.availHeight; var l_params = 'status=1' + ',resizable=1' + ',scrollbars=1' + ',width=' + l_width + ',height=' + l_height + ',left=0' + ',top=0'; launchApplication.winRefs[l_windowName] = window.open(l_url, l_windowName, l_params); launchApplication.winRefs[l_windowName].moveTo(0,0); launchApplication.winRefs[l_windowName].resizeTo(l_width, l_height); } else { launchApplication.winRefs[l_windowName].focus() } } 

您需要执行2个testing… 1检查是否定义了popup窗口,并检查是否已closures。

 if(typeof(winRef) == 'undefined' || winRef.closed){ //create new winRef = window.open(....); } else { //it exists, load new content (if necs.) winRef.location.href = 'your new url'; //give it focus (in case it got burried) winRef.focus(); } 

你可以在打开新窗口的页面中使用这样的东西:

 var newWindow = null; function launchApplication() { // open the new window only if newWindow is null (not opened yet) // or if it was closed if ((newWindow == null) || (newWindow.closed)) newWindow = window.open(...); } 

工作代码

 var newwindow = null; function popitup(url) { if ((newwindow == null) || (newwindow.closed)) { newwindow=window.open(url,'Buy','width=950,height=650,scrollbars=yes,resizable=yes'); newwindow.focus(); } else { newwindow.location.href = url; newwindow.focus(); } } 

你可以这样检查:

 if(!winref || winref.closed) { } 

尝试检查:

如果(!winref || winref.closed ||!winref.document){}