BOM编程

BOM编程

BOM(Browser Object Model)是指浏览器对象模型,它提供了与浏览器窗口进行交互的对象和方法

BOM的组成部分

  • Window对象:代表浏览器窗口,是BOM的顶层对象,包含了全局的属性和方法。
  • Navigator对象:提供关于浏览器的信息,比如浏览器的名称、版本等。
  • Screen对象:提供关于用户屏幕的信息,比如屏幕的高度、宽度等。
  • Location对象:代表当前窗口的URL信息,可以用来获取或设置浏览器的URL。
  • History对象:代表浏览器的历史记录,可以用来在浏览历史记录中前进或后退。
  • Document对象:代表当前加载的文档,可以用来操作文档的内容和结构。

BOM的常见应用

  • 操作浏览器窗口:可以通过BOM来控制浏览器窗口的大小、位置等属性。
  • 处理浏览器事件:可以利用BOM来捕获和处理浏览器事件,比如点击事件、滚动事件等。
  • 操作浏览器历史记录:可以使用BOM来管理浏览器的历史记录,实现前进、后退等功能。
  • 获取浏览器信息:可以通过BOM获取浏览器的信息,比如浏览器类型、版本等。
  • 控制页面跳转:可以使用BOM来控制页面的跳转和重定向。

常用Window对象的API

三种弹窗
  • Window.alert() - 显示一个带有指定消息和一个“确定”按钮的警告框。
  • Window.confirm() - 显示一个带有指定消息以及“确定”和“取消”按钮的对话框。
  • Window.prompt() - 显示一个提示框,要求用户输入文本。
打开关闭窗口
  • Window.open() - 打开一个新的浏览器窗口或新标签页。
  • Window.close() - 关闭当前窗口。
  • Window.location - 提供有关当前 URL 的信息并允许跳转到新的 URL。
定时执行
  • Window.setTimeout() - 在指定的毫秒数后执行指定的函数。
  • Window.setInterval() - 每隔指定的毫秒数重复执行指定的函数。
其它
  • Window.document - 表示当前窗口中载入的文档。
  • Window.localStorage - 提供了访问当前域名下的本地存储功能,可以存储键值对数据。

window对象常见属性的常用方法

window.history:
  • window.history 对象允许你与浏览器的历史记录进行交互。
  • 使用 history.back() 和 history.forward() 方法来在历史记录中向后或向前导航。
  • history.length 属性可以获取历史记录中的条目数量。
window.location:
  • window.location 对象包含有关当前 URL 的信息,并允许你与浏览器的地址栏进行交互。
  • location.href 获取当前页面的 URL,也可以设置新的 URL 来导航到其他页面。
  • 可以使用 location.reload() 方法重新加载当前页面。
window.sessionStorage
  • 会话级别存储:
  • sessionStorage 存储的数据仅在当前会话期间有效。会话期间指的是用户在浏览器标签或窗口中保持打开状态的时间段。
  • 当用户关闭浏览器标签或窗口时,sessionStorage 中存储的数据会被清除。
  • 使用方法:
    • 通过 sessionStorage.setItem(key, value) 方法来存储数据。
    • 通过 sessionStorage.getItem(key) 方法来获取存储的数据。
    • 可以使用 sessionStorage.removeItem(key) 方法来删除特定键的数据。
  • 示例:
// 存储数据到 sessionStorage
sessionStorage.setItem('username', 'John Doe');

// 获取存储的数据
const username = sessionStorage.getItem('username');
console.log(username); // 输出: John Doe
localStorage:
  • 永久性存储:
  • localStorage 存储的数据在用户关闭浏览器后仍然有效,它们会永久保存在用户的浏览器中,直到被显式删除。
  • 不同于 sessionStorage,localStorage 中的数据不会因为会话结束而丢失。
  • 使用方法:
    • 通过 localStorage.setItem(key, value) 方法来存储数据。
    • 通过 localStorage.getItem(key) 方法来获取存储的数据。
    • 使用 localStorage.removeItem(key) 方法来删除特定键的数据。
  • 示例:
// 存储数据到 localStorage
localStorage.setItem('theme', 'dark');

// 获取存储的数据
const theme = localStorage.getItem('theme');
console.log(theme); // 输出: dark

BOM编程实例

// 获取浏览器窗口的宽度和高度
var windowWidth = window.innerWidth;
var windowHeight = window.innerHeight;

// 弹出一个确认框
var result = window.confirm("确定要删除吗?");
if (result) {
    // 执行删除操作
}

// 跳转到指定页面
window.location.href = "https://www.example.com";

// 前进或后退
window.history.forward();
window.history.back();

网络编程,当然要用到Windows Socket(套接字)技术。Socket相关的操作由一系列API函数来完成,比如socket、bind、listen、connect、accept、send、sendto、recv、recvfrom等。调用这些API函数有一定的先后次序,有些函数的参数还比较复杂,对于开发者来说,不是很好用。于是,微软的MFC提供了两个类:CAsyncSocket和CSocket,极大地方便了Socket功能的使用。   CAsyncSocket类在较低层次上封装了Windows Socket API,并且通过内建一个(隐藏的)窗口,实现了适合Windows应用的异步机制(Windows Socket API默认情况下工作在阻塞模式,不方便直接在消息驱动的Windows程序上使用)。CSocket类从CAsyncSocket类派生,进一步简化了Socket功能的应用。不过很遗憾,正因为这两个类都内建了一个窗口,它们并不是线程安全的(thread-safe);如果要在多线程环境下应用Socket功能,建议自行封装Socket API函数。 基于TCP的socket编程的服务器端程序流程如下: 1、创建套接字 2、将套接字绑定到一个本地地址和端口号上(bind) 3、将套接字设为监听模式,准备接受客户请求(listen) 4、等待客户请求,请求到来时接受请求,建立链接,并返回 一个新的基于此次通信的套接字(accept) 5、用返回的套接字和客户端进行通信(send、recv) 6、返回,等待另一客户请求 7、关闭套接字 基于TCP的socket编程的客户端程序流程如下: 1、创建套接字 2、向服务器端发送请求(connect) 3、和服务器端进行通信(send、recv) 4、关闭套接字 基于UDP的socket编程的服务器端程序流程如下: 1、创建套接字 2、将套接字绑定到本地地址和端口号上(bind) 3、等待接收数据(recvfrom) 4、关闭套接字 基于UDP的socket编程的客户端程序流程如下: 1、创建套接字 2、和服务器端进行通信(sendto) 3、关闭套接字 异步方式指的是发送方不等接收方响应,便接着发下个数据包的通信方式;而同步指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式。   阻塞套接字是指执行此套接字的网络调用时,直到成功才返回,否则一直阻塞在此网络调用上,比如调用recv()函数读取网络缓冲区中的数据,如果没有数据到达,将一直挂在recv()这个函数调用上,直到读到一些数据,此函数调用才返回;而非阻塞套接字是指执行此套接字的网络调用时,不管是否执行成功,都立即返回。比如调用recv()函数读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。在实际Windows网络通信软件开发中,异步非阻塞套接字是用的最多的。平常所说的C/S(客户端/服务器)结构的软件就是异步非阻塞模式的。   对于这些概念,初学者的理解也许只能似是而非,我将用一个最简单的例子说明异步非阻塞Socket的基本原理和工作机制。目的是让初学者不仅对Socket异步非阻塞的概念有个非常透彻的理解,而且也给他们提供一个用Socket开发网络通信应用程序的快速入门方法。操作系统是Windows 98(或NT4.0),开发工具是Visual C++6.0。   MFC提供了一个异步类CAsyncSocket,它封装了异步、非阻塞Socket的基本功能,用它做常用的网络通信软件很方便。但它屏蔽了Socket的异步、非阻塞等概念,开发人员无需了解异步、非阻塞Socket的原理和工作机制。因此,建议初学者学习编网络通信程序时,暂且不要用MFC提供的类,而先用Winsock2 API,这样有助于对异步、非阻塞Socket编程机制的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值