JS 浏览器窗口控制

业务场景:老系统里(非SPA) 在主页面有很多子模块页面,在点击去到子模块a页面打开新窗口,如果a页面已经在浏览器打开则不打开新的窗口,切换至a页面窗口

首先,了解window对象
1.window.open

window.open('http://www.baidu.com') //打开一个新页面 返回打开的window对象本身

2.window.focus()

window.focus() //聚焦到当前页面

3.window.closed

window.closed  //可以拿到 window的开启关闭状态  true关闭  false开启

然后梳理思路

1.判断页面是否被打开,以及页面的开启关闭状态closed 
2.打开一个新的页面时,存放被打开的window对象// obj[url] = window.open(url)
3.打开一个已经打开的页面时, focus()聚焦到该页面 //obj[url].focus()

最后code

    <body>
    <button message="kk" class="pink" onclick="openBrowser('b')">click to B</button>
    <button message="kk" class="pink" onclick="openBrowser('c')">click to C</button>
    <script>
      // # 切换到当前最新打开的窗口
      var objWin = {};
      function openBrowser(url) {
        let target;
        if (url == "b") {
          target = "http://127.0.0.1:5500/bhref.html";
        } else {
          target = "http://127.0.0.1:5500/chref.html";
        }
        //判断是否打开
        console.log(objWin[url]);
        if (objWin[url] == null || objWin[url].closed) {
        //新打开的页面window存起
          objWin[url] = window.open(target);
          console.log(objWin[url]);
        } else {
       	//已经打开的页面 直接聚焦切换
          objWin[url].focus();
        }
        console.log(objWin);
      }
    </script>
  </body>

抛出问题:如果用户刷新页面,保存的变量都被清除了,功能失效

你一定会想,存到storage里面不就好了,直接给出结论:json转字符串出现 循环引用问题

sessionStorage.setItem('objWin',JSON.stringify(objWin)) //Error
JSON.stringify出现 “Converting circular structure to JSON

待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值