当前位置: 首页 > news >正文

JavaScript Windows 浏览器对象模型

Window 对象

  • BOM 的核心就是 window 对象
  • 所有浏览器都支持 window 对象。它表示浏览器窗口。
  • 所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。
  • 全局变量是 window 对象的属性。
  • 全局函数是 window 对象的方法。
  • HTML DOM 的 document 也是 window 对象的属性之一

定义全局变量与在 window 对象上直接定义属性差别。

1、全局变量不能通过 delete 操作符删除;而 window 属性上定义的变量可以通过 delete 删除

var num=123;
window.str="string";
delete num;
delete str;
console.log(num); //123
console.log(str); //str is not defined
//全局变量不能通过 delete 删除,因为通过 var 定义全局变量会有一个名为 [Configurable] 的属性,
//默认值为 false,所以这样定义的属性不可以通过 delete 操作符删除

2、访问未声明的变量会抛出错误,但是通过查询 window 对象,可以知道某个可能未声明的变量是否存在。

var newValue=oldValue; // 报错:oldValue is not defined
var newValue=window.oldValue; // 不会报错
console.log(newValue); // undefined

3、有些自执行函数里面的变量,想要外部也访问到的话,在 window 对象上直接定义属性。

方法

  • window.open() - 打开新窗口
  • window.close() - 关闭当前窗口
  • window.moveTo() - 移动当前窗口
  • window.resizeTo() - 调整当前窗口的尺寸

Window 尺寸

有三种方法能够确定浏览器窗口的尺寸。
对于Internet Explorer、Chrome、Firefox、Opera 以及 Safari:

  • window.innerHeight - 浏览器窗口的内部高度(包括滚动条)
  • window.innerWidth - 浏览器窗口的内部宽度(包括滚动条)

对于 Internet Explorer 8、7、6、5:

  • document.documentElement.clientHeight
  • document.documentElement.clientWidth

或者

  • document.body.clientHeight
  • document.body.clientWidth
var w=window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;var h=window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;

属性

screen

包含有关用户屏幕的信息
window.screen对象在编写时可以不使用 window 这个前缀。

  • screen.availWidth - 可用的屏幕宽度
    • 返回访问者屏幕的宽度,以像素计,减去界面特性,比如窗口任务栏。
    • document.write("可用宽度: " + screen.availWidth);
  • screen.availHeight - 可用的屏幕高度
    • 返回访问者屏幕的高度,以像素计,减去界面特性,比如窗口任务栏。
    • document.write("可用高度: " + screen.availHeight);
  • 总宽度
    • document.write(screen.width + "*" + screen.height);
  • 色彩深度
    • document.write(screen.colorDepth);
  • 色彩分辨率
    • document.write(screen.pixelDepth);

location

用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。
window.location 对象在编写时可不使用 window 这个前缀。 一些例子:

  • location.hostname 返回 web 主机的域名
  • location.pathname 返回当前页面的路径和文件名
  • location.port 返回 web 主机的端口 (80 或 443)
  • location.protocol 返回所使用的 web 协议(http: 或 https:)
  • location.href 属性返回当前页面的 URL。document.write(location.href);
  • location.pathname 属性返回 URL 的路径名。document.write(location.pathname);
  • location.assign(url) 加载 URL 指定的新的 HTML 文档。 就相当于一个链接,跳转到指定的url,当前页面会转为新页面内容,可以点击后退返回上一个页面。
  • location.replace(url) 通过加载 URL 指定的文档来替换当前文档 ,这个方法是替换当前窗口页面,前后两个页面共用一个窗口,所以是没有后退返回上一页的

history

包含浏览器历史
window.history对象在编写时可不使用 window 这个前缀。
为了保护用户隐私,对 JavaScript 访问该对象的方法做出了限制。

  • history.back()加载历史列表中的前一个 URL,和在浏览器中点击后退按钮是相同的
  • history.forward() 加载历史列表中的下一个 URL,和在浏览器中点击前进按钮是相同的

navigator

包含有关访问者浏览器的信息。
在编写时可不使用 window 这个前缀。

<script>
txt = "<p>浏览器代号: " + navigator.appCodeName + "</p>";
txt+= "<p>浏览器名称: " + navigator.appName + "</p>";
txt+= "<p>浏览器版本: " + navigator.appVersion + "</p>";
txt+= "<p>启用Cookies: " + navigator.cookieEnabled + "</p>";
txt+= "<p>硬件平台: " + navigator.platform + "</p>";
txt+= "<p>用户代理: " + navigator.userAgent + "</p>";
txt+= "<p>用户代理语言: " + navigator.language + "</p>";
document.getElementById("example").innerHTML=txt;
</script>

警告!!!

来自 navigator 对象的信息具有误导性,不应该被用于检测浏览器版本,这是因为:

  • navigator 数据可被浏览器使用者更改
  • 一些浏览器对测试站点会识别错误
  • 浏览器无法报告晚于浏览器发布的新操作系统

浏览器检测

由于 navigator 可误导浏览器检测,使用对象检测可用来嗅探不同的浏览器。
由于不同的浏览器支持不同的对象,您可以使用对象来检测浏览器。例如,由于只有 Opera 支持属性 “window.opera”,您可以据此识别出 Opera。
例子:if (window.opera) {…some action…}

http://www.lryc.cn/news/104548.html

相关文章:

  • 【uniapp 获取缓存及清除缓存】
  • 【vim 学习系列文章 2 - vim 常用插件配置】
  • 【外卖系统】修改菜品
  • 【暑期每日一练】 day11
  • 神经概率语言模型
  • 什么是shadow DOM?
  • 我的 365 天创作纪念日
  • spark-sql : “java.lang.NoSuchFieldError: out“ 异常解决
  • Node.js入门笔记(包含源代码)以及详细解析
  • windows自动化点击大麦app抢购、捡漏,仅支持windows11操作系统
  • vue 拦截 v-html 中 a 标签 href 跳转
  • 分布式id、系统id、业务id以及主键之间的关系
  • 设计模式七:适配器模式(Adapter Pattern)
  • 数据结构---队列
  • chatGPT在软件测试中应用方式有哪些?
  • chatgpt 接口使用(一)
  • 【个人笔记】Linux 服务管理两种方式service和systemctl
  • HCIP中期考试实验
  • 【WebRTC---源码篇】(二十二)WebRTC的混音处理
  • MTK system_server 卡死导致手机重启案例分析
  • 加强 Kubernetes 能力:利用 CRD 定义多版本资源的实现方式
  • 区块链应用 DApp 开发需要掌握的技能
  • 关于新版本selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘等问题
  • c++通过自然语言处理技术分析语音信号音高
  • [pymc3][python]pymc3安装后测试代码2
  • Go语言time库,时间和日期相关的操作方法
  • JVM总结笔记
  • C++ 缓存再排序,解决多线程处理后的乱序问题,不知道思路对不对[挠下巴]
  • 华为数通HCIA-地址分类及子网划分
  • Linux第七章之gdb与makefile使用