JS 瀏覽器視窗控制
阿新 • • 發佈:2021-01-14
技術標籤:應用場景windowjswebjavascript
業務場景:老系統裡(非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
待續…