JavaScript基础--BOM
BOM
浏览器对象模型 Browser Object Model
window 对象
视口大小,视口位置
视口位置
1 | // 整个窗口的大小 |
滚动视口
1 | window.scrollTo(x, y); |
alert confirm promt
alert() 弹出一个警告框
confirm() 弹出一个确认框,用户选择后返回布尔值
prompt() 弹出一个表单框,返回用户输入的信息
location 对象
location 既是 window 的属性,也是 document 的属性
1 | window.location === document.location; // true |
查询字符串
URLSearchParams
1 | // ?lang=zh_cn |
操作地址
跳转到新地址
1 | let url = "/user/1"; |
修改 url 且不加入浏览历史记录
1 | location.replace(url); |
重载页面
1 | location.reload(); // 从缓存中加载 |
navigator 对象
navigator 对象用来标注浏览器,通常用于确定浏览器的类型
1 | // 列举几个常用的 |
screen 对象
用以访问当前显示器的信息
history 对象
history 对象表示当前窗口首次使用以来用户的单行历史记录
出于安全考虑,这个对象不会暴露用户访问过的 url,但是可以通过他在不知道实际 url 的情况下前进和后退
1 | 如果URL发生变化,则会在历史记录中生成一条新条目,这包括URL的散列值(因此把location.hash设置为一个新的值,会在历史记录中增加一条记录)。这个行为常被单页应用程序框架用来模拟前进和后退。这样做不会因导航而触发页面刷新 |
历史状态管理—hashchange 事件
1 | // hashchange事件会在页面url的散列变化时被触发,开发者可以在此时进行某些操作。而状态管理API则可以让开发者改变浏览器URL而不刷新页面 |
因为 pushState()会创建新的历史记录,所以也会相应的启用后退按钮,此时单机后退按钮就会触发 window 对象上的 popstate 事件
popstate 事件的事件对象有个 state 属性,其中包含了通过 pushState()第一个参数传递的 state 对象
1 | window.addEventListener("popstate", (event) => { |
可以通过 history.state 来获取当前对象的状态,也可以使用 replaceState()并传入 pushState()相同的前两个参数来更新状态,更新状态不会创建新的历史记录,只会覆盖当前状态:
1 | history.replaceState({ newFoo: "newBar" }, "new title"); |
传给 pushState 和 replaceState()的 state 对象应该只包含可以被序列化的信息,DOM 元素之类并不适合放到状态对象里保存
HTML5 状态管理时,要确保通过 pushState()创建的每个‘假’URL 背后都对应服务器上的一个真实物理 URL。否则点击刷新将会导致 404 问题。所有 SPA 框架都必须通过服务器或客户端的某些配置解决这个问题