JavaScript window.open仅当窗口不存在时才打开

JavaScript window.open仅当窗口不存在时才打开,javascript,popup,window,Javascript,Popup,Window,我有一个应用程序,点击一个链接就会打开一个新窗口。这将生成一个包含Java小程序的页面。我遇到的问题是,单击相同的链接会重新加载页面,这会重置Java应用程序。有什么办法可以解决这个问题吗?可以接受的两种解决方案是: 允许从单击处理程序打开多个窗口 如果窗口已打开,则忽略后续请求 我为自己是Javascript新手而道歉——这并不是我的主要职责 附加到处理程序的代码是 function launchApplication(l_url, l_windowName) { var l_width

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

  • 允许从单击处理程序打开多个窗口
  • 如果窗口已打开,则忽略后续请求
  • 我为自己是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);
    }
    
    编辑:

    感谢回复-我稍微修改了建议,这样我就可以通过该功能打开多个URL

    编辑2: 此代码的另一个版本位于


    您可以在打开新窗口的页面中使用如下内容:

    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(...);
    }
    

    您可以这样检查:

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

    我会这样做-基本上将所有被引用的打开的窗口存储在函数本身上。当函数启动时,检查窗口是否不存在或已关闭-因此,启动弹出窗口。否则,请关注该请求的现有弹出窗口

    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个测试。。。1检查弹出窗口是否已定义,2检查是否已关闭

    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();
    }
    
    尝试检查:

    如果(!winref | | winref.closed | |!winref.document){ }工作代码

    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();    
        }
    }  
    

    是的,我就是这样做的——占用更少的空间,更多的重用,独立的+1+1非常好。但是有一件事,您在原始检查中有
    winRefs
    ,但后来您将其拼错为
    winRefs
    ,或者简单地说:如果(!newWindow | | newWindow.closed),则如果窗口已经打开,则不会聚焦窗口,也不会加载新窗口URL@annakata--我认为不存在空指针问题,因为如果
    !winref
    为true,则永远不应检查IOR的第二部分--
    winref.closed
    。你觉得这样对吗?还是我完全错了?交叉浏览是一个很好的解决方案,但它会重新加载窗口,即使URL是same@user2826057根据代码中我的注释中的注释-如果您不想重新加载相同URL的内容,您可以测试
    if(winRef.location.href!=myNewURL){…}
    仅在不同的情况下重新加载。
    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();    
        }
    }