【问题标题】:Javascript: Check for duplicate opened windowJavascript:检查重复打开的窗口
【发布时间】:2011-06-06 01:14:09
【问题描述】:

是否可以检查同一个窗口是否已经打开?

例如,我通过 javascript 打开了一个窗口。

我可以检查是否通过 javascript 在另一个页面上打开了吗?

如果页面已经打开,则只想关注页面以避免重复窗口。

谢谢 ;)

【问题讨论】:

    标签: javascript windows


    【解决方案1】:

    如果您想从链接打开网址,这将有所帮助

     var Win=null;
    function newTab(url){
    //var Win; // this will hold our opened window
    
    // first check to see if the window already exists
    if (Win != null) {
    // the window has already been created, but did the user close it?
    // if so, then reopen it. Otherwise make it the active window.
    if (!Win.closed) {
      Win.close();
    //   return winObj;
    }
    
     // otherwise fall through to the code below to re-open the window
     } 
    
     // if we get here, then the window hasn't been created yet, or it
     // was closed by the user.
     Win = window.open(url);
    
     return Win; 
    
     }
     newTab('index.html');
    

    【讨论】:

      【解决方案2】:

      查看window.open() 方法。您必须指定窗口的名称作为第二个参数。如果已经有一个同名的窗口,那么新的 URL 将在已经存在的窗口中打开,见http://www.w3schools.com/jsref/met_win_open.asp

      如果你真的想检查,如果窗口是由你自己的脚本打开的,那么你必须在全局变量或类似的变量中保留对打开的窗口的引用并使用它来创建它

      var myOpenedWindow = myOpenedWindow || window.open(URL, "MyNewWindow");
      

      您也可以将此行为封装在一个方法中:

      var myOpenWindow = function(URL) {
          var myOpenedWindow = myOpenedWindow || window.open(URL, "MyNewWindow");
          myOpenedWindow.location.href= URL;
          myOpenedWindow.focus();
      }
      

      然后用myOpenWindow('http://www.example.com/');调用那个函数

      【讨论】:

      • 感谢这位朋友的解决方案;)
      • 在较新的浏览器中,您还可以使用BroadcastChannel 来检测重复标签。
      【解决方案3】:

      如果您有父子窗口,那么这里有一个解决方案,可让您检查子窗口是否从启动它的父窗口打开。这将带来一个 聚焦到子窗口而不重新加载其数据:

       <script type="text/javascript">
          var popWin;
          function popPage(url)
          {
             if (popWin &! popWin.closed && popWin.focus){
                 popWin.focus();
             } else {
                popWin = window.open(url,'','width=800,height=600');
            }
          }
      </script>
      
          <a href="http://www.xzy.com"
      onclick="popPage(this.href);return false;">link</a>
      

      还有一件事::--- 如果用户刷新父窗口,它可能会丢失所有的 对它可能已经打开的任何子窗口的引用。

      希望这会有所帮助,并让我知道输出结果。

      【讨论】:

        猜你喜欢
        • 2016-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-18
        • 1970-01-01
        • 2019-02-01
        • 2014-08-01
        相关资源
        最近更新 更多