BOM和DOM介绍、Window对象、Window子对象

【一】BOM和DOM介绍

【1】什么是DOM/BOM

  • 文档对象模型(Document Object Model, 简称 DOM)
  • 浏览器对象模型(Browser Object Model, 简称 BOM)
  • 是 JavaScript 与网页内容及浏览器环境进行交互的两种核心概念。

【2】DOM

(1)概述

  • 文档对象模型(DOM)是一个编程接口,它以树状结构来表示 HTML 或 XML 文档。
  • 在 DOM 中,每个HTML元素、属性、文本节点等都被视为一个对象,通过JavaScript可以创建、查询、修改和删除这些对象。

(2)示例

  • document.getElementById(id): 通过元素ID获取DOM元素对象。
  • element.querySelector/pseudo-class: 根据CSS选择器或伪类选择DOM元素对象。
  • element.appendChild(newElement): 向指定元素添加子元素。
  • element.setAttribute(name, value): 设置元素属性值。
  • element.innerText/innerHTML: 获取或设置元素内的文本内容或HTML内容。

【2】BOM

(1)概述

  • 浏览器对象模型(BOM)则是浏览器提供的API集合,主要用于处理与浏览器环境相关的任务,如窗口管理、导航、cookie、location等。

(2)示例

  • window.open(url[, name[, features]]): 打开新的浏览器窗口或tab访问指定URL。
  • window.location.href: 获取当前页面的URL地址,并可用于更改页面位置。
  • window.history.back(): 返回历史记录中的上一页。
  • navigator.userAgent: 获取浏览器的信息,例如类型、版本等。

【3】总结

  • DOM 和 BOM 是 JavaScript 开发中两个不可或缺的部分,分别负责对网页内容和浏览器环境进行深层次的操作,使得前端开发者能够实现丰富的交互功能和动态效果。

【二】Window对象

【1】open()

// 语法
window.open("url","target","features")
url:指定的网址
target:打开新标签页的方式 _blank  打开新窗口(默认) _self  原地打开
features:指定打开的窗口大小的参数 'height=400px,width=400px'

【2】close()

  • 关闭当前窗口。
window.close();

【3】setTimeout()

  • 在指定的时间延迟后执行一次指定的函数或者一段代码。
setTimeout(function(){
  // 执行代码
}, 100); // 1秒后执行

setTimeout(function () {
    console.log("等会见")
}, 100); //1秒后执行

【4】setInterval()

  • 以固定的时间间隔重复执行指定的函数或者一段代码。
setInterval(function(){
  // 执行代码
}, 200); // 每2秒执行一次

setInterval(function () {
    console.log("执行中...")
}, 200); // 每2秒执行一次

【5】alert()

  • 显示一个带有指定消息和一个确认按钮的警告框。
window.alert("Hello, World!");

【6】confirm()

  • 显示一个带有指定消息和两个按钮(确认和取消)的对话框。
if (window.confirm("Are you sure?")) {
  // 用户点击了确认按钮
} else {
  // 用户点击了取消按钮
}

if (window.confirm("Are you sure?")) {
    window.alert("yes")
} else {
    window.alert("no")
}

【7】prompt()

  • 显示一个带有指定消息和一个文本输入框的对话框。
let name = window.prompt("Please enter your name:");

【8】innerHeight属性

  • 返回浏览器窗口的内部高度(即视口的高度),以像素为单位,不包括浏览器的工具栏、滚动条等元素。
let windowHeight = window.innerHeight;
console.log(windowHeight); // 输出当前窗口的视口高度

【9】innerWidth属性

  • 返回浏览器窗口的内部宽度(即视口的宽度),以像素为单位,不包括浏览器的工具栏、滚动条等元素。
let windowWidth = window.innerWidth;
console.log(windowWidth); // 输出当前窗口的视口宽度

【10】监听 resize 事件

  • 两个属性返回的值会随着窗口的大小调整而改变
  • 如果需要监控窗口大小的改变,可以通过监听 resize 事件来实现
  • 在使用这两个属性时,可以根据返回的数值进行相应的布局或调整操作,以适应当前窗口的尺寸。
window.addEventListener("resize", function() {
  let windowHeight = window.innerHeight;
  let windowWidth = window.innerWidth;
  console.log("Window Height:", windowHeight);
  console.log("Window Width:", windowWidth);
});

【11】window.opener

  • 是指打开当前窗口的那个窗口对象。它是 Window 对象的一个属性,用于在当前窗口中引用到打开它的父窗口或者来源窗口。

  • 在以下情况下可以使用 window.opener

(1)场景一:window.open()

  • 当前窗口是通过使用 JavaScript 的 window.open() 方法打开的弹出窗口时,可以使用 window.opener 来引用打开它的父窗口。
let popup = window.open("popup.html"); // 打开一个弹出窗口
  • 然后,在弹出窗口 popup.html 中的 JavaScript 代码中,可以通过 window.opener 引用到父窗口:
let parentWindow = window.opener;
console.log(parentWindow); // 输出父窗口对象

(2)场景二:postMessage()方法

  • 当前窗口是通过其他窗口向其发送消息(使用 postMessage() 方法)时,可以使用 event.source 属性来获取消息来源窗口,并通过 window.opener 来引用该来源窗口。
  • 例如,在来源窗口的 JavaScript 代码中,向当前窗口发送消息:
let currentWindow = window.open("current.html"); // 打开当前窗口

// 向当前窗口发送消息
currentWindow.postMessage("Hello", "http://example.com");
  • 然后,在当前窗口 current.html 中的 JavaScript 代码中,通过监听 message 事件接收来自来源窗口的消息,并使用 event.source 和 window.opener 引用到来源窗口:
window.addEventListener("message", function(event) {
  let message = event.data;
  let sourceWindow = event.source;
  let openerWindow = window.opener;

  console.log("Message:", message);
  console.log("Source Window:", sourceWindow);
  console.log("Opener Window:", openerWindow);
});

(3)在来源窗口的js代码中,向当前窗口发送消息

window.postMessage("Hello!");

【三】Window子对象

window.location // 控制地址
window.history // 控制浏览器历史记录
window.navigator // 获取浏览器标识信息

【1】window.document

  • 此子对象表示当前窗口中的文档对象,用于对页面内容进行读取和修改操作。
  • 通过 window.document,可以使用各种方法来查询和修改当前页面的 HTML 结构、CSS 样式和 DOM 元素。
  • 例如,要获取页面标题:
let pageTitle = window.document.title;
console.log(pageTitle);

【2】window.location

  • 此子对象包含有关当前页面 URL 的信息,并提供了一些与页面导航相关的方法。
  • 通过 window.location,可以获取当前页面的 URL、查询字符串参数、路径等信息,并且可以使用一些方法来导航到其他页面。
  • 例如,要在新标签页中打开一个 URL:
window.location.href = 'https://example.com';

(1)window.location.href*

  • 获取当前页面的完整 URL(包括协议、域名、路径等)。
let currentURL = window.location.href;
console.log(currentURL);

// 跳转到目标地址
window.href = "url地址" 

(2)window.location.protocol

  • 获取当前页面的协议部分(例如 'http:' 或 'https:')。
let protocol = window.location.protocol;
console.log(protocol);

(3)window.location.host

  • 获取当前页面的主机(域名和端口号)部分。
let host = window.location.host;
console.log(host);

(4)window.location.hostname

  • 获取当前页面的主机名部分。
let hostname = window.location.hostname;
console.log(hostname);

(5)window.location.port

  • 获取当前页面的端口号部分。
let port = window.location.port;
console.log(port);

(6)window.location.pathname

  • 获取当前页面的路径部分。
let pathname = window.location.pathname;
console.log(pathname);

(7)window.location.search

  • 获取当前页面的查询参数部分(即 URL 中问号后面的内容)。
let searchParams = window.location.search;
console.log(searchParams);

(8)window.location.hash

  • 获取当前页面的片段标识部分(即 URL 中井号后面的内容)。
let hash = window.location.hash;
console.log(hash);

(9)window.location.assign()

  • 将当前页面重定向到指定的 URL。
// 将当前页面重定向到 example.com
window.location.assign("http://example.com");

(10)window.location.reload()*

  • 重新加载当前页面。
// 重新加载当前页面
window.location.reload();

【3】window.history

  • 此子对象用于操作浏览器的历史记录,包括向前和向后导航。

    • 通过 window.history,可以使用一些方法来在历史记录中向前或向后导航,以及获取当前历史记录的状态数量。
  • 例如,要后退到上一个页面:

window.history.back();

(1)window.history.length

  • 返回当前会话的历史记录条目数。
let historyLength = window.history.length;
console.log(historyLength);

(2)window.history.back()*

  • 加载上一个历史记录。相当于用户点击浏览器的后退按钮。
window.history.back();

(3)window.history.forward()*

  • 加载下一个历史记录。相当于用户点击浏览器的前进按钮。
window.history.forward();

(4)window.history.go()

  • 根据传入的整数参数,加载相对于当前历史记录的某个条目。负数表示后退,正数表示前进, 表示重新加载当前页。
// 后退两个历史记录
window.history.go(-2);

// 前进一个历史记录
window.history.go(1);

// 重新加载当前页
window.history.go();

(5)window.history.pushState()

  • 向浏览器历史记录中添加新的状态,并且不会触发页面的重新加载。它接受三个参数:state、title 和 URL。
// 添加新的历史记录状态
window.history.pushState({ page: 1 }, "Page 1", "/page1.html");

(6)window.history.replaceState()

  • 替换当前的历史记录状态,不会触发页面的重新加载。它接受三个参数:state、title 和 URL。
// 替换当前历史记录状态
window.history.replaceState({ page: 2 }, "Page 2", "/page2.html");

【4】window.navigator

  • 此子对象提供有关浏览器环境和设备的信息,包括用户代理字符串、浏览器版本、操作系统等。
  • 例如,要获取用户代理字符串:
let userAgent = window.navigator.userAgent;
console.log(userAgent);

(1)window.navigator.userAgent*

  • 返回浏览器的用户代理字符串,该字符串包含了有关浏览器厂商、版本号以及操作系统等信息。(该方法可以用来校验反爬程序)
let userAgent = window.navigator.userAgent;
console.log(userAgent);

(2)window.navigator.platform*

  • 返回操作系统平台,如 "Win32"、"MacIntel" 等。
let platform = window.navigator.platform;
console.log(platform);

(3)window.navigator.vendor

  • 返回浏览器的厂商或供应商名称。
let vendor = window.navigator.vendor;
console.log(vendor);

(4)window.navigator.language

  • 返回浏览器的首选语言,通常是用户操作系统的默认语言。
let language = window.navigator.language;
console.log(language);

(5)window.navigator.cookieEnabled

  • 返回一个布尔值,表示浏览器是否启用了 cookie。
let cookieEnabled = window.navigator.cookieEnabled;
console.log(cookieEnabled);

(6)window.navigator.plugins

  • 返回一个包含浏览器插件列表的 PluginArray 对象。
let plugins = window.navigator.plugins;
console.log(plugins);
posted @ 2024-10-11 12:02  光头大炮  阅读(11)  评论(0编辑  收藏  举报