读书笔记 - js高级程序设计 - 第八章 BOM
|
BOM的核心对象是window
|
它表示浏览器的一个实例,在浏览器中,window对象有双重角色,它既是通过js访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象,这意味着在网页中定义的任何一个对象,变量 和 函数
都以window作为其Global函数
|
|
窗口关系和frame
|
每个frame都有自己的window对象,并且保存在frames集合中,
在frames集合中,可能通过数值索引 或者 框架名称来访问 相应的 window 对象
|
|
top
|
始终指向 最高层的 框架,也就是浏览器窗口
|
|
self
|
始终指向 window
引入self对象的目的,只是为了与top和parent对象对应起来,因此它不格外包含其它值
|
|
确定和修改window对象位置的属性和方法
|
var leftPos = ( typeof window.screenLeft == "number" ) ? window.screenLeft : window.screenX ;
var topPos = ( typeof window.screenTop == "number" ) ? window.screenTop: window.screenY ;
|
|
将窗口移动到屏幕左上角
|
window.moveTo( 0, 0 ) ; //在Opera或IE7里可能不管用
|
| 将窗口向下移动 100 像素 |
window.moveBy( 0, 100 ) ;//在Opera或IE7里可能不管用
|
|
将窗口移动到(200,300 )
|
window.moveTo( 200, 300 );//在Opera或IE7里可能不管用
|
|
将窗口向左移动 50 像素
|
window.moveBy( -50, 0 ) ;v
|
|
如何确定页面视口的大小
|
var pageWidth = window.innerWidth ;
var pageHeight = window.innerHeight ;
if( typeof pageWidth != "number" ){
if( document.compatMode == "CSS1Compat" ){
pageWidth = document.documentElement.clientWidth ;
pageHeight = document.documentElement.clientHeight;
}else{
pageWidth = document.body.clientWidth ;
pageHeight = ducument.body.clientHeight ;
}
}
|
|
缩放窗口
|
window.resizeTo( 100, 100 ) ;//在Opera或IE7里可能不管用
window.resizeBy( 100, 50 ) ; //在Opera或IE7里可能不管用
|
|
innerWidth
innerHeight
outerWidth
outerHeight
|
outer表示浏览器窗口本身的尺寸
inner表示页面视图容器的大小
|
|
导航和打开窗口
|
window.open()传四个参数
1 url
2 窗口目标。 比如 a标签的name,也可以传 _self _parent _top _blank
3 特性字符串(如果打开的是新窗口或标签页,才启作用) 类似"height=40,top=10"
4 新页面是否取代浏览器历史记录中当前加载页面的布尔值
这方法会返回一个指向新窗口的引用
|
|
上面的第3个参数可以传的值
|
fullscreen 传yes或no 表示浏览器窗口是否最大化 仅限IE
location 传yes或no 表示是否显示地址栏 或是否禁止地址栏
menubar 传yes或no 表示是否显示菜单栏
resizable 传yes或no 表示是否可以拖动浏览器窗口的边框改变其大小
scroolbars 传yes或no 表示如果内容在视口中显示不下 是否允许滚动
status 传yes或no 表示是否显示状态栏
toolbar 传yes或no 表示是否显示工具栏
height 新窗口的高度
left 表示新窗口的左坐标
top 数值 表示新窗口的上坐标
width 表示新窗口的宽度
|
|
关闭窗口
|
var a = window.open();
a.close();
|
|
想关闭浏览器的主窗口
|
如果没有得到用户的允许,代码是不能关闭浏览器的主窗口的
|
|
想关闭弹出窗口
|
在不经过用户允许的情况下,可以关闭弹出窗口自己
|
|
window.opernr
|
1 只在最外层的window对象(top中)有定义
2 它保存着打开它的原始窗口对象
|
|
弹出窗口 和 原始窗口
的关系
|
弹出窗口有一个指针指向打开它的原始窗口
但原始窗口中并没有这样的指针指向弹出窗口
|
|
什么时候设置opener=null
|
告诉浏览器新创建的标签页不需要与打开它的标签页通信
因此可以在独立的进程中运行
标签页之间的联系一旦切断 将没有办法恢复
|
|
防止恶意广告弹窗
|
禁用了window.open()自动执行
只能通过用户点击 来执行
|
|
如何判断一个窗口被屏蔽
|
var wroxWin = window.open();
if( wrowWin == nulll ){
表示这个窗口被屏蔽 ;
}
|
|
间歇调用和超时调用
|
javascript是单线程语言
最好不要用间歇模式 因为后一个间歇调用可能会在前一个间歇调用结束之前结束
|
|
系统对话框
|
alert confirm prompt
都是同步和模态的
|
|
confirm
获得用户点击的是确定 还是 取消
|
var result = confirm( "test" ) ;
|
|
prompt
获得用户输入的文本
|
var result = prompt("test")
|
|
location
|
它既是 window 也是 document 的属性
|
|
location的属性
|
hash
host www.17zuoye.net:80
hostName www.17zuoye.net
pathName /students/img
port 80
protocol http:
search $q=javascript
除了hash,修改其它属性时,页面都会以新的url重新加载
|
|
location的位置操作
|
location.assign( url ) ;
window.location = url
location.href = url
|
|
想实现 不能回到上一个页面
|
location.replace( newUrl );
|
|
reload
|
reload( ) 可能从缓存中加载
reload( true ) 一定从服务器端加载
|
|
navigator对象
|
用于保存浏览器信息
appCodeName 浏览器的名称
appName 浏览器的名字
cookieEnabled cookie是否能用
cpuClass 客户端计算机的cpu类型
onLine 是否连着网
platform 什么平台
plugins 插件数组
vendor 浏览器品牌
vendorSub 有关供应商的次要信息
|
|
判断是否有某个插件
|
function hasPlugin( name ){
name = name.toLowerCase();
for( var i = 0 ; i < navigator.plugins.length ; i ++ ){
if( navigator.plugins[i].name.toLowerCase().indexOf(name) > -1 {
return true
}
return false ;
}
hasPlugin("flash");
|
|
检测IE中的插件
|
function hasIEPlugin( name )
{
try{
new ActiveXObject( name );
return true
}catch( ex )
return false
}
|
|
判断插件的总方法
|
function hasFlash()
{
var result = hasPlugin(“Flash" ) ;
if( !result ){
result = hasIEPlugin( "ShockwaveFlash.ShockwaveFlash");
}
return result
}
|
|
将一个站点注册为处理RSS源的处理程序
|
navigator.registerContentHandler("application/rss+xml", "http://www.somereader.com?feed=%s", "Some Reader")
1 RSS源的MIME类型
2 接收RSS源的URL 其中%s表示 RSS源的URL,由浏览器自动插入
3 应用程序的名称
|
|
registerProtocolHandler
|
navigator.registerProtocolHandler("mailto","http://www.somemailclient.com?cmd=%s","Some Mall Client");
|
|
screen对象
|
只用来表明客户端的能力
window.resizeTo( screen.availWidth, screen.availHeight ) ;
P214
|
|
history对象
|
history.go( - 1 );
history.go( 1 );
history.go( 2 ) ;
history.go( "wrox.com");
history.back();
history.forward();
|
|
如何确定用户是否一开始就打开了你的页面
|
if( history.length == 0 ){
}
|
读书笔记 - js高级程序设计 - 第八章 BOM的更多相关文章
- 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图
读书笔记 - js高级程序设计 - 第十三章 事件 canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好 有时候即使浏览器支持,操作系统如果缺缺 ...
- js高级程序设计第八章BOM(未完成,待续)
8.1window对象 BOM的核心对象是window,表示浏览器的一个实例. window对象有双重角色,既可以通过就是访问浏览器窗口的接口,又是ECMAscript规定的Global对象 8. ...
- 读书笔记 - js高级程序设计 - 第十章 DOM
文档元素 是文档的最外层元素,在Html页面中,文档元素始终都是<html>元素 在xml中,任何元素都可以是文档元素 Node类型 Node.ELEMENT_NODE 元素 Node ...
- 读书笔记 - js高级程序设计 - 第五章 引用类型
引用类型 和 类 不是一个概念 用typeof来检测属性是否存在 typeof args.name == "string" 需要实验 访问属性的方法 .号和[] 一般情况下要 ...
- 读书笔记 - js高级程序设计 - 第十二章 DOM2和DOM3
Node类型的变化 访问元素的样式 myDiv.style.backgroundColor = "red" myDiv.style.width = "100px& ...
- 读书笔记 - js高级程序设计 - 第十一章 DOM扩展
对DOM的两个主要的扩展 Selectors API HTML5 Element Traversal 元素遍历规范 querySelector var body = document.query ...
- 读书笔记 - js高级程序设计 - 第七章 函数表达式
闭包 有权访问另一个函数作用域中的变量的函数 匿名函数 函数没有名字 少用闭包 由于闭包会携带包含它的函数的作用域,因此会比其它函数占用更多的内存.过度使用闭包可能会导致内存占用过多,我们建议读者 ...
- 读书笔记 - js高级程序设计 - 第六章 面向对象的程序设计
EcmaScript有两种属性 数据属性 和 访问器属性 数据属性有4个特性 Configurable Enumerable Writable Value 前三个值的默认值都为false ...
- 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题
5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这 ...
随机推荐
- 「NOIP2009」靶形数独
传送门 Luogu 解题思路 这题其实挺简单的. 首先要熟悉数独,我们应该要优先搜索限制条件多的行,也就是可能方案少的行,显然这样可以剪枝,然后再发挥一下dfs的基本功就可以了. 细节注意事项 爆搜题 ...
- 使用Spring Cloud Gateway保护反应式微服务(一)
反应式编程是使你的应用程序更高效的一种越来越流行的方式.响应式应用程序异步调用响应,而不是调用资源并等待响应.这使他们可以释放处理能力,仅在必要时执行处理,并且比其他系统更有效地扩展. Java生态系 ...
- jQuery新的事件绑定机制on()示例应用
投稿:whsnow 字体:[增加 减小] 类型:转载 从jQuery1.7开始,jQuery引入了全新的事件绑定机制,on()和off()两个函数统一处理事件绑定,下面通过示例为大家介绍下 ...
- HDU1880 魔咒词典
题目大意:对应的输入多行,每行两个字符串,两个字符串互相映射.接下来询问的时候,如果这个字符串出现过,输出其对应的字符串. 分析:二重哈希来判断字符串是否存在,输出其对应的字符串就行.二重哈希的入门题 ...
- 5G/NR 频带详解
原文链接:http://www.sharetechnote.com/html/5G/5G_FR_Bandwidth.html 在NR中,3GPP中规定了大约两个大的频率范围.一个是我们通常所说的(su ...
- ReadAsm2
首先查看题目 下载文档之后用虚拟机打开(我用的是Kali Linux) 推测应该是对这个func函数反汇编结果应该就出来了 用c写一下算出结果 #include<bits/stdc++.h> ...
- 1、MYSQL 数据库的安装与配置
安装 1.打开官网https://www.mysql.com,选择社区版本 2.如图点击下在安装(本人在下载过程中亲身感觉下载时间非常漫长,需要等待,不知道为啥会有限速,可以参考网上教程用迅雷进行 ...
- django中使用ORM模型修改数据库的表名
在django中,使用models.py创建好一张表后,如果不指定表的名字,那么表的名字就默认为 model_modelname 例如: class Book(models.Model): id = ...
- JVM:Java 类的加载机制
虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验,转换,解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制. 类的生命周期 类从被加载到虚拟机内 ...
- C++代做,C++编程代做,C++程序代做,留学生C++ Lab代写
C++代做,C++编程代做,C++程序代做 我们主要面向留学生,广泛接美加澳国内港台等地编程作业代写,中英文均可. C语言代写 C++代写 Python代写 Golang代写 Java代写 一年半的时 ...