Javascript 如何关闭多个浏览器选项卡?

Javascript 如何关闭多个浏览器选项卡?,javascript,richfaces,Javascript,Richfaces,我正在使用RichFaces开发一个Web应用程序 在主页上,有许多页面链接,每次单击链接都需要在新选项卡中显示相应的页面 要求:- <rich:panelMenuGroup> <rich:panelMenuItem> <h:outputLink value="#" onclick="return NewWindow('./../sample.jsp','Sample 1');"> <h:o

我正在使用
RichFaces
开发一个Web应用程序

在主页上,有许多页面链接,每次单击链接都需要在新选项卡中显示相应的页面

要求:-

  <rich:panelMenuGroup>
      <rich:panelMenuItem>
          <h:outputLink value="#" onclick="return NewWindow('./../sample.jsp','Sample 1');">
              <h:outputText value="Sample"/>
          </h:outputLink>
      </rich:panelMenuItem>

      <rich:panelMenuItem>
          <h:outputLink value="#" onclick="return NewWindow('./../test.jsp','Test');">
              <h:outputText value="Test"/>
          </h:outputLink>
      </rich:panelMenuItem>
  </rich:panelMenuGroup>

  <h:commandLink value="Logout" action="--" onclick="closeTabs();"/> 
   var object = new Array(); 
   function NewWindow(mypage,myname)
    {
        var newwin = window.open(mypage,'_blank');
        object.push(newwin);
        if (window.focus)
          {
             newwin.focus()
          }
        return false;
    }

   function closeTabs()
    {
        for (i = 0; i < object.length; i++) 
          {
              object[i].close();
          }
    }
    <script type="text/javascript" language="javascript">           
               var objectArray = new Array(); 
               function NewWindow(mypage,myname)
                {          
                   var newwin = window.open(mypage,'_blank');
                   objectArray.push(newwin);
                   localStorage.tabArray = JSON.stringify(objectArray);
                   if(window.focus)
                      {
                       newwin.focus()
                      }
                      return false;
                 }

                function closeWindow()
                  {
                    objectArray = JSON.parse(localStorage.tabArray); // In this part exception coming, why?
                    for(i = 0; i < objectArray.length; i++) 
                       {
                         objectArray[i].close();
                       }
                  }
   </script>
当我点击注销按钮时,上面的页面链接
选项卡
需要自动关闭

我试过一些方法,但达不到我的要求

JSP:-

  <rich:panelMenuGroup>
      <rich:panelMenuItem>
          <h:outputLink value="#" onclick="return NewWindow('./../sample.jsp','Sample 1');">
              <h:outputText value="Sample"/>
          </h:outputLink>
      </rich:panelMenuItem>

      <rich:panelMenuItem>
          <h:outputLink value="#" onclick="return NewWindow('./../test.jsp','Test');">
              <h:outputText value="Test"/>
          </h:outputLink>
      </rich:panelMenuItem>
  </rich:panelMenuGroup>

  <h:commandLink value="Logout" action="--" onclick="closeTabs();"/> 
   var object = new Array(); 
   function NewWindow(mypage,myname)
    {
        var newwin = window.open(mypage,'_blank');
        object.push(newwin);
        if (window.focus)
          {
             newwin.focus()
          }
        return false;
    }

   function closeTabs()
    {
        for (i = 0; i < object.length; i++) 
          {
              object[i].close();
          }
    }
    <script type="text/javascript" language="javascript">           
               var objectArray = new Array(); 
               function NewWindow(mypage,myname)
                {          
                   var newwin = window.open(mypage,'_blank');
                   objectArray.push(newwin);
                   localStorage.tabArray = JSON.stringify(objectArray);
                   if(window.focus)
                      {
                       newwin.focus()
                      }
                      return false;
                 }

                function closeWindow()
                  {
                    objectArray = JSON.parse(localStorage.tabArray); // In this part exception coming, why?
                    for(i = 0; i < objectArray.length; i++) 
                       {
                         objectArray[i].close();
                       }
                  }
   </script>

Java脚本:-

  <rich:panelMenuGroup>
      <rich:panelMenuItem>
          <h:outputLink value="#" onclick="return NewWindow('./../sample.jsp','Sample 1');">
              <h:outputText value="Sample"/>
          </h:outputLink>
      </rich:panelMenuItem>

      <rich:panelMenuItem>
          <h:outputLink value="#" onclick="return NewWindow('./../test.jsp','Test');">
              <h:outputText value="Test"/>
          </h:outputLink>
      </rich:panelMenuItem>
  </rich:panelMenuGroup>

  <h:commandLink value="Logout" action="--" onclick="closeTabs();"/> 
   var object = new Array(); 
   function NewWindow(mypage,myname)
    {
        var newwin = window.open(mypage,'_blank');
        object.push(newwin);
        if (window.focus)
          {
             newwin.focus()
          }
        return false;
    }

   function closeTabs()
    {
        for (i = 0; i < object.length; i++) 
          {
              object[i].close();
          }
    }
    <script type="text/javascript" language="javascript">           
               var objectArray = new Array(); 
               function NewWindow(mypage,myname)
                {          
                   var newwin = window.open(mypage,'_blank');
                   objectArray.push(newwin);
                   localStorage.tabArray = JSON.stringify(objectArray);
                   if(window.focus)
                      {
                       newwin.focus()
                      }
                      return false;
                 }

                function closeWindow()
                  {
                    objectArray = JSON.parse(localStorage.tabArray); // In this part exception coming, why?
                    for(i = 0; i < objectArray.length; i++) 
                       {
                         objectArray[i].close();
                       }
                  }
   </script>
var object=new Array();
函数NewWindow(mypage,myname)
{
var newwin=window.open(我的页面,“空白”);
object.push(newwin);
if(window.focus)
{
newwin.focus()
}
返回false;
}
函数closeTabs()
{
对于(i=0;i
在刷新页面之前,上述代码工作正常,因为刷新时,
var对象
数组会自动重置

是否有其他方法关闭选项卡


请帮助我完成此操作。

我希望更新脚本将解决您的问题。请试试这个

var object=new Array();
函数NewWindow(mypage,myname)
{
var newwin=window.open(我的页面,“空白”);
object.push(newwin);
if(window.focus)
{
newwin.focus()
}
localStorage.tabArray=JSON.stringify(对象);
返回false;
}
函数closeTabs()
{
object=JSON.parse(localStorage.tabArray);
对于(i=0;i}
@Alexis Toby,我尝试使用您的代码,但在下面的注释中标记了异常

我将您的代码集成到下面:-

  <rich:panelMenuGroup>
      <rich:panelMenuItem>
          <h:outputLink value="#" onclick="return NewWindow('./../sample.jsp','Sample 1');">
              <h:outputText value="Sample"/>
          </h:outputLink>
      </rich:panelMenuItem>

      <rich:panelMenuItem>
          <h:outputLink value="#" onclick="return NewWindow('./../test.jsp','Test');">
              <h:outputText value="Test"/>
          </h:outputLink>
      </rich:panelMenuItem>
  </rich:panelMenuGroup>

  <h:commandLink value="Logout" action="--" onclick="closeTabs();"/> 
   var object = new Array(); 
   function NewWindow(mypage,myname)
    {
        var newwin = window.open(mypage,'_blank');
        object.push(newwin);
        if (window.focus)
          {
             newwin.focus()
          }
        return false;
    }

   function closeTabs()
    {
        for (i = 0; i < object.length; i++) 
          {
              object[i].close();
          }
    }
    <script type="text/javascript" language="javascript">           
               var objectArray = new Array(); 
               function NewWindow(mypage,myname)
                {          
                   var newwin = window.open(mypage,'_blank');
                   objectArray.push(newwin);
                   localStorage.tabArray = JSON.stringify(objectArray);
                   if(window.focus)
                      {
                       newwin.focus()
                      }
                      return false;
                 }

                function closeWindow()
                  {
                    objectArray = JSON.parse(localStorage.tabArray); // In this part exception coming, why?
                    for(i = 0; i < objectArray.length; i++) 
                       {
                         objectArray[i].close();
                       }
                  }
   </script>

var objectArray=新数组();
函数NewWindow(mypage,myname)
{          
var newwin=window.open(我的页面,“空白”);
objectArray.push(newwin);
localStorage.tabArray=JSON.stringify(objectArray);
if(window.focus)
{
newwin.focus()
}
返回false;
}
函数closeWindow()
{
objectArray=JSON.parse(localStorage.tabArray);//在这一部分中,异常即将出现,为什么?
对于(i=0;i
尝试将您的var对象重命名为其他对象,因为object是JavaScript中的一个关键字,因此您可能会混淆JavaScript引擎。请尝试将数组存储在某个localstorage中,并在刷新后保留它。@jeff,尝试过但没有用@Alexis Toby,已经尝试过localstorage,但是包含windows对象的数组被转换为字符串是一个问题。在localstorage中的对象数组中存储值之后,我需要windows对象。在这里,localstorage将windows对象转换为字符串格式,以便在保存后从localstorage获取值时,我无法获取作为windows对象来关闭选项卡。我在firebug中遇到此错误“SyntaxError:JSON.parse:JSON数据的第1行第1列出现意外字符“如果我使用上述选项,那么JSON解析得不好。你能给你看JSON样本吗?@venkatRaj很抱歉,我没有理解你的意思?你能把你的JSON全部添加到这个答案中吗?@Alexis Toby,哪一个?打开新标签后,你会在objectArray中得到一些数据,这是我要问的数据。@Alexis Toby,“[object Window],[object Window]”这是我得到的,打开两个选项卡后。objectArray.push(newwin)中objectArray的值是多少;localStorage.tabArray=JSON.stringify(objectArray);