1. 程式人生 > 實用技巧 >BOM操作

BOM操作

1.視窗操作

1.在當前視窗開啟,可後退
    HTML: <a href="url" target="_self">
    JS: open("url","_self")
2.在當前視窗開啟,禁止後退
    JS: location.replace("新url")  //用新url代替history中當前地址
3.在新視窗開啟,可開啟多個
    HTML: <a href="url" target="_blank">
    JS: open("url","_blank")
4.在新視窗開啟,只能開啟一個
    HTML: <a href="url" target="自定義的視窗名">
    JS: open("url","自定義的視窗名")
原理: target屬性其實是為新視窗指定記憶體中唯一的視窗名,瀏覽器規定,同一時刻,同名視窗只能開啟一個,後開啟的會覆蓋先開啟的
    _self :自動使用當前視窗的name
    _blank :不指定視窗名, 每開啟一個視窗,瀏覽器會自動隨機生成內部視窗名
    關閉視窗: /*window.*/close();

練習:對上述開啟視窗的四種方式分別練習

  <script>
        function open1(){
            open("http://www.baidu.com","_self");
        }
        function open2(){
            location.replace("http://www.baidu.com");
        }
        function open3(){
            open("http://www.baidu.com","_blank");
        }
        
function open4(){ open("http://www.baidu.com","baidu"); } </script> <a href="http://www.baidu.com" target="_self">在當前視窗開啟,可後退</a> <a href="javascript:open1()">在當前視窗開啟,可後退(JS)</a> <br> <a href="javascript:open2()">在當前視窗開啟,不可後退(JS)</a> <br> <a href="http://www.baidu.com" target="_blank">在新視窗開啟,可開啟多個</a> <a href="javascript:open3()">在新視窗開啟,可開啟多個(JS)</a> <br> <a href="http://www.baidu.com" target="baidu">在新視窗開啟,只能開啟一個</a> <a href="javascript:open4()">在新視窗開啟,只能開啟一個(JS)</a>

2.history

定義:儲存當前視窗開啟後,成功訪問過的url的歷史紀錄棧
操作:
    前進:history.go(1)
    後退:history.go(-1)    history.go(-2)
    重新整理:history.go(0)

3.location

定義:儲存當前視窗正在開啟的url地址的物件
屬性:
    .href :獲取或設定完整的url地址
    .protocol :協議
    .host :主機名+埠號
    .hostname :主機名
    .port :埠號
    .pathname :相對路徑
    .search :查詢字串引數
    .hash :錨點地址
方法:
1.在當前視窗開啟,可後退
    location="url"
2.在當前視窗開啟,禁止後退
    location.replace("新url")
3.重新整理
    普通重新整理:優先從快取中獲取資源,快取沒有或過期,才去伺服器找
        F5
        history.go(0)
        location.reload()
    強制重新整理:無論有沒有快取,都強制從伺服器獲取新資源
        location.reload(true)

練習:將search轉化為物件形式

//?username=zhangdong&pwd=123456&favs=running&favs=swimming&favs=basketball
        function search2Obj() {
            var obj = {};
            if (location.search) {
                var arr = location.search.slice(1).split("&");
                //arr:[username=zhangdong,pwd=123456,...]
                for (var str of arr) {//遍歷arr中每個子字串
                    var subs = str.split("=");
                    var key = subs[0];
                    var value = subs[1];
                    //subs[username, zhangdong]
                    if (obj[key] === undefined)
                        obj[key] = value;
                    //.key=>["key"] key被寫死為固定的字串
                    //[key] key是動態變化的變數
                    else {
                        obj[key] = [].concat(obj[key], value);
                        //將屬性的舊值和新值,拼到一個共同的陣列中,然後將陣列儲存到新的屬性中
                    }
                }
            }
            return obj;
        }
        var obj = search2Obj();
        console.log(obj);