Browser對象

Window 對象

Window 對象表示瀏覽器中打開的窗口。
如果文檔包含框架(frame 或 iframe 標籤),瀏覽器會爲 HTML 文檔創建一個 window 對象,併爲每個框架創建一個額外的 window 對象。

History 對象

History 對象包含用戶(在瀏覽器窗口中)訪問過的 URL
History 對象是 window 對象的一部分,可通過 window.history 屬性對其進行訪問。
註釋:沒有應用於 History 對象的公開標準,不過所有瀏覽器都支持該對象。

瀏覽器窗口有一個history對象,用來保存瀏覽歷史。

history.length // 3

history對象提供了一系列方法,允許在瀏覽歷史之間移動。

back():移動到上一個訪問頁面,等同於瀏覽器的後退鍵。

forward():移動到下一個訪問頁面,等同於瀏覽器的前進鍵。

go():接受一個整數作爲參數,移動到該整數指定的頁面,比如go(1)相當於forward()go(-1)相當於back()

history.back();

history.forward();

history.go(-2);

如果移動的位置超出了訪問歷史的邊界,以上三個方法並不報錯,而是默默的失敗。

history.go(0)相當於刷新當前頁面。

常見的“返回上一頁”鏈接,代碼如下。

document.getElementById('backLink').onclick = function () {
  window.history.back();
}

注意,返回上一頁時,頁面通常是從瀏覽器緩存之中加載,而不是重新要求服務器發送新的網頁。

HTML5爲history對象添加了兩個新方法,history.pushState()和history.replaceState(),用來在瀏覽歷史中添加和修改記錄。

if (!!(window.history && history.pushState)){
  // 支持History API
} else {
  // 不支持
}

上面代碼可以用來檢查,當前瀏覽器是否支持History API。如果不支持的話,可以考慮使用Polyfill庫History.js。

history.pushState方法接受三個參數,依次爲:

state:一個與指定網址相關的狀態對象,popstate事件觸發時,該對象會傳入回調函數。如果不需要這個對象,此處可以填null。
title:新頁面的標題,但是所有瀏覽器目前都忽略這個值,因此這裏可以填null。
url:新的網址,必須與當前頁面處在同一個域。瀏覽器的地址欄將顯示這個網址。

var stateObj = { foo: 'bar' };
history.pushState(stateObj, 'page 2', '2.html');

添加上面這個新記錄後,瀏覽器地址欄立刻顯示example.com/2.html,但並不會跳轉到2.html,甚至也不會檢查2.html是否存在,它只是成爲瀏覽歷史中的最新記錄。假定這時你訪問了google.com,然後點擊了倒退按鈕,頁面的url將顯示2.html,但是內容還是原來的1.html。你再點擊一次倒退按鈕,url將顯示1.html,內容不變。

總之,pushState方法不會觸發頁面刷新,只是導致history對象發生變化,地址欄會有反應。

如果pushState的url參數,設置了一個新的錨點值(即hash),並不會觸發hashchange事件。如果設置了一個跨域網址,則會報錯。

// 報錯

history.pushState(null, null, ‘https://twitter.com/hello‘);

上面代碼中,pushState想要插入一個跨域的網址,導致報錯。這樣設計的目的是,防止惡意代碼讓用戶以爲他們是在另一個網站上。

history.replaceState()

history.replaceState方法的參數與pushState方法一模一樣,區別是它修改瀏覽歷史中當前紀錄。
假定當前網址是example.com/1.html,我們使用pushState方法在瀏覽記錄(history對象)中添加一個新記錄。

假定當前網頁是example.com/example.html。

history.pushState({page: 1}, ‘title 1’, ‘?page=1’);

history.pushState({page: 2}, ‘title 2’, ‘?page=2’);

history.replaceState({page: 3}, ‘title 3’, ‘?page=3’);

history.back()

// url顯示爲http://example.com/example.html?page=1

history.back()

// url顯示爲http://example.com/example.html

history.go(2)

// url顯示爲http://example.com/example.html?page=3

history.state屬性

history.state屬性返回當前頁面的state對象。

history.pushState({page: 1}, ‘title 1’, ‘?page=1’);

history.state

// { page: 1 }

popstate事件

每當同一個文檔的瀏覽歷史(即history對象)出現變化時,就會觸發popstate事件。

需要注意的是,僅僅調用pushState方法或replaceState方法 ,並不會觸發該事件,只有用戶點擊瀏覽器倒退按鈕和前進按鈕,或者使用JavaScript調用back、forward、go方法時纔會觸發。另外,該事件只針對同一個文檔,如果瀏覽歷史的切換,導致加載不同的文檔,該事件也不會觸發。

使用的時候,可以爲popstate事件指定回調函數。這個回調函數的參數是一個event事件對象,它的state屬性指向pushState和replaceState方法爲當前URL所提供的狀態對象(即這兩個方法的第一個參數)。

如果當前窗口先後訪問了三個網址,那麼history對象就包括三項,history.length屬性等於3。
轉自:http://javascript.ruanyifeng.com/bom/history.html

Location 對象

Location 對象包含有關當前 URL 的信息。
Location 對象是 Window 對象的一個部分,可通過 window.location 屬性來訪問。

assign()    加載新的文檔。
reload()    重新加載當前文檔。(刷新當前頁面 重點)
replace()   用新的文檔替換當前文檔。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章