BOM之history對象
前面的話
history物件保存著使用者上網的歷史記錄,從視窗被開啟的那一刻算起。由於安全性的考慮,開發人員無法得到使用者瀏覽器的URL,但藉由使用者造訪過的頁面列表,可以在不知道實際URL的情況下實現後退和前進。本文將詳細介紹BOM中的history物件
length
history.length屬性保存著歷史記錄的URL數量。初始時,該值為1。如果目前視窗先後造訪了三個網址,history.length屬性等於3
由於IE10+瀏覽器在初始時回傳2,存在相容性問題,所以該值並不常用
history.length // 初始时,该值为1history.length // 访问三个网址后,该值为3
方法
history物件提供了一系列方法,允許在瀏覽歷史之間移動,包括go()、back()和forward()
【go()】
使用go()方法可以在使用者的歷史記錄中任意跳轉。這個方法接收一個參數,表示向後或向前跳轉的頁面數的一個整數值。負數表示向後跳轉(類似後退鈕),正數表示向前跳轉(類似前進按鈕)
history.go(-1history.go(1history.go(2
go()方法無參數時,相當於history.go(0),可以刷新目前頁面
//刷新当前页面history.go();//刷新当前页面history.go(0);
【back()】
back()方法用於模仿瀏覽器的後退按鈕,相當於history.go(-1)
.【forward()] ()方法用於模仿瀏覽器的前進按鈕,相當於history.go(1)//后退一页history.back()//前进一页history.forward()
增改記錄
tory HTML5為history .pushState()和history.replaceState(),用來在瀏覽歷史中新增和修改記錄。 state屬性用來保存記錄對象,而popstate事件用來監聽history對象的變化
[注意]IE9-瀏覽器不支援
【pushState()】
history.pushState(pushState()】
history.pushState()方法向瀏覽器歷史添加了一個狀態。 pushState()方法帶有三個參數:一個狀態物件、一個標題(現在被忽略了)以及一個可選的URL位址
history.pushState(state, title, url);
state object —— 状态对象是一个由pushState()方法创建的、与历史纪录相关的javascript对象。 当用户定向到一个新的状态时,会触发popstate事件。事件的state属性包含了历史纪录的state对象。如果不需要这个对象,此处可以填null title —— 新页面的标题,但是所有浏览器目前都忽略这个值,因此这里可以填null URL —— 这个参数提供了新历史纪录的地址。新URL必须和当前URL在同一个域,否则,pushState()将丢出异常。这个参数可选,如果它没有被特别标注,会被设置为文档的当前URL
var stateObj = { foo: 'bar' }; history.pushState(stateObj, 'page 2', '2.html');
// 报错history.pushState(null, null, 'https://twitter.com/hello');
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://www.php.cn/history.back()// url显示为http://www.php.cn/history.go(2)// url显示为http://www.php.cn/
history.pushState({page: 1}, 'title 1', '?page=1'); history.state// { page: 1 }
【state】
statestate〜〜〜〜〜.window.onpopstate = function (event) { console.log('location: ' + document.location); console.log('state: ' + JSON.stringify(event.state)); };
【popstate事件】
每當同一個文檔的瀏覽歷史(即history物件)出現變化時,就會觸發popstate事件
需要注意的是,只是調用不會觸發該事件,只有使用者點擊瀏覽器倒退按鈕和前進按鈕,或使用javascript呼叫back()、forward()、go()方法時才會觸發。另外,該事件只針對同一個文檔,如果瀏覽歷史的切換,導致加載不同的文檔,該事件也不會觸發
使用的時候,可以為popstate事件指定回調函數。這個回呼函數的參數是一個event事件對象,它的state屬性指向pushState和replaceState方法為當前URL所提供的狀態對象(即這兩個方法的第一個參數)
var currentState = history.state;
上面程式碼中的event.state,就是透過pushState和replaceState方法,為目前URL綁定的state物件
這個state物件也可以直接透過history物件讀取
🎜🎜var currentState = history.state;
往返缓存
默认情况下,浏览器会在当前会话(session)缓存页面,当用户点击“前进”或“后退”按钮时,浏览器就会从缓存中加载页面
浏览器有一个特性叫“往返缓存”(back-forward cache或bfcache),可以在用户使用浏览器的“后退”和“前进”按钮时加快页面的转换速度。这个缓存中不仅保存着页面数据,还保存了DOM和javascript的状态;实际上是将整个页面都保存在了内存里。如果页面位于bfcache中,那么再次打开该页面时就不会触发load事件
[注意]IE10-浏览器不支持
【pageshow】
pageshow事件在页面加载时触发,包括第一次加载和从缓存加载两种情况。如果要指定页面每次加载(不管是不是从浏览器缓存)时都运行的代码,可以放在这个事件的监听函数
第一次加载时,它的触发顺序排在load事件后面。从缓存加载时,load事件不会触发,因为网页在缓存中的样子通常是load事件的监听函数运行后的样子,所以不必重复执行。同理,如果是从缓存中加载页面,网页内初始化的JavaScript脚本(比如DOMContentLoaded事件的监听函数)也不会执行
[注意]虽然这个事件的目标是document,但必须将其事件处理程序添加到window
pageshow事件有一个persisted属性,返回一个布尔值。页面第一次加载时或没有从缓存加载时,这个属性是false;当页面从缓存加载时,这个属性是true
(function(){ var showCount = 0; window.onload = function(){ console.log('loaded'); } window.onpageshow = function(e){ e = e || event; showCount ++; console.log(e.persisted,showCount + 'times'); } })();
[注意]上面的例子使用了私有作用域,以防止变量showCount进入全局作用域。如果单击了浏览器的“刷新”按钮,那么showCount的值就会被重置为0,因为页面已经完全重新加载了
【pagehide】
与pageshow事件对应的是pagehide事件,该事件会在浏览器卸载页面的时候触发,而且是在unload事件之前触发。与pageshow事件一样,pagehide在document上面触发,但其事件处理程序必须要添加到window对象
[注意]指定了onunload事件处理程序的页面会被自动排除在bfcache之外,即使事件处理程序是空的。原因在于,onunload最常用于撤销在onload中所执行的操作,而跳过onload后再次显示页面很可能就会导致页面不正常
pagehide事件的event对象也包含persisted属性,不过其用途稍有不同。如果页面是从bfcache中加载的,那么persisted的值就是true;如果页面在卸载之后会被保存在bfcache中,那么persisted的值也会被设置为true。因此,当第一次触发pageshow时,persisted的值一定是false,而在第一次触发pagehide时,persisted就会变成true(除非页面不会被保存在bfcache中)
window.onpagehide = function(e){ e = e || event; console.log(e.persisted); }
以上就是BOM之history对象的内容,更多相关内容请关注PHP中文网(www.php.cn)!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

dom和bom物件有:1、「document」、「element」、「Node」、「Event」和「Window」等5種DOM物件;2、「window」、「navigator」、「location」、「history」和「screen」等5種BOM物件。

bom和dom在作用和功能、與JavaScript的關係、相互依賴性、不同瀏覽器的兼容性和安全性考量等方面都有區別。詳細介紹:1、作用和功能,BOM的主要作用是操作瀏覽器窗口,它提供了瀏覽器窗口的直接訪問和控制,而DOM的主要作用則是將網頁文檔轉換為一個對象樹,允許開發者透過這個物件樹來取得和修改網頁的元素和內容;2、與JavaScript的關係等等。

PHPbom的意義和作用在PHP程式設計中,BOM(ByteOrderMark)是一種特殊的字元序列,用來標識檔案的編碼方式和位元組順序。 BOM通常是在檔案開頭的位置插入的,以便讓解析器識別編碼方式,特別是對於一些不以ASCII編碼開始的編碼格式,例如UTF-8。 BOM在不同的編碼格式下有不同的作用,以下將具體探究PHP中BOM的意義和作用,並結合程式碼範例加

DOM實現了對網頁內容的動態訪問和更新,BOM則提供了與瀏覽器視窗進行交互的API,包括控制瀏覽器的行為、獲取瀏覽器和用戶環境的信息,DOM主要用於操作網頁內容,而BOM則主要用於操作瀏覽器視窗和與瀏覽器交互,兩者共同構成了Web前端開發中重要的基礎,為開發者提供了豐富的方法來控制和操作網頁及瀏覽器,實現交互性強、使用者體驗良好的Web應用程式。

php程式碼掉bom的方法:1.使用「function clearbom($contents){...}」方式去掉文字中的bom頭;2、透過「function checkBOM ($filename) {...}」方法偵測並去掉bom頭;3、透過「function SearchBOM($string) {...}」方法搜尋目前檔案是否有BOM並且移除即可。

BOM是瀏覽器物件模型,而DOM是文件物件模型。 BOM是一種用於描述瀏覽器視窗和瀏覽器提供的各種物件的模型,它是瀏覽器的核心組成部分,透過BOM可以存取和操作瀏覽器視窗、框架等物件。 DOM提供了一組API,使開發人員能夠透過腳本語言存取和操作文件中的元素和屬性,其核心概念包括節點、元素、屬性、文字等,DOM樹的根節點是document對象,透過該對象可以存取整個文件的內容。

差異有:1、意義不同,bom是指瀏覽器物件模型,dom是指文件物件模型;2、結構不同,bom以瀏覽器視窗為中心,dom文件中的元素表示為節點,並依照樹狀結構進行組織;3、交互方式不同,bom透過Window物件與JS進行交互,dom透過物件之間的嵌套和引用進行交互;4、應用範圍不同,bom用於瀏覽器視窗和瀏覽器的交互, dom用於文件內容的操作與互動;5、發展趨勢不同等等。
