BOM浏览器对象模型BrowserObjectModel.docx
- 文档编号:17924270
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:15
- 大小:102.33KB
BOM浏览器对象模型BrowserObjectModel.docx
《BOM浏览器对象模型BrowserObjectModel.docx》由会员分享,可在线阅读,更多相关《BOM浏览器对象模型BrowserObjectModel.docx(15页珍藏版)》请在冰点文库上搜索。
BOM浏览器对象模型BrowserObjectModel
BO■—浏览器对象模型(Browser
ObjectModel)
什么是BOMI---模型是所研究的系统、过程、事物或概念的一种表达形式!
•BOh是BrowserObjectModel的缩写,简称浏览器对象模型
•BOM提供了独立于内容而与浏览器窗口进行交互的对象
•由于BOMfc要用于管理窗口与窗口之间的通讯,因此其核心对象是window
*BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性
«BOM缺乏标准,JavaScript语法的标准化组织是ECMADOM勺标准化组织是W3(WHATWG,WebHypertextApplicationTechnologyWorkingGroup
网页超文本应用程序技术工作组目前正在努力促进BOMS标准化)
*BOMR初是Netscape浏览器标准的一部分
基本的BOM体系结构图
能利用BOM做什么?
BOh提供了一些访问窗口对象的一些方法,我们可以用它来移动窗口位置,
改变窗口大小,打开新窗口和关闭窗口,弹出对话框,进行导航以及获取客户的一些信息如:
浏览器品牌版本,屏幕分辨率。
但BOMR强大的功能是它提供了一
个访问HTML页面的一入口document对象,以使得我们可以通过这个入口来
使用DOM勺强大功能!
!
!
window对象是BOM的顶层(核心)对象,所有对象都是通过它延伸出来的,
也可以称为window的子对象。
由于window是顶层对象,因此调用它的子对象时
可以不显示的指明window对象,例如下面两行代码是一样的:
document.write("BOM");"BOM");
window--window对象是BOM中所有对象的核心。
window对象表示整个浏
览器窗口,但不必表示其中包含的内容。
此外,window还可用于移动或调整它
表示的浏览器的大小,或者对它产生其他影响。
JavaScript中的任何一个全局函数或变量都是window的属性
window子对象
*document对象
*frames对象
«history对象
*location对象
*navigator对象
«screen对象
window对象关系属性
•parent:
如果当前窗口为frame,指向包含该frame的窗口的frame
(frame)
*self:
指向当前的window对象,与window同意。
(window对象)
*top:
如果当前窗口为frame,指向包含该frame的top-level的window对象
•window:
指向当前的window对象,与self同意。
・opener:
当窗口是用javascript打开时,指向打开它的那人窗口(开启者)
window对象定位属性
«IE提供了window.screenLeft和window.screenTop对象来判断窗口的位置,但未提供任何判断窗口大小的方法。
用offsetHeight属性可以获取
视口的大小(显示HTML页的区域),但它们不是标准属性。
*Mozilla提供window.screenX和window.screenY属性判断窗口的位置。
它还提供了window.innerWidth和window.innerHeight属性来判断视口的大小,window.outerWidth和window.outerHeight属性判断浏览器窗口自身的大小。
window对象的方法
窗体控制
moveBy(x,y)从当前位置水平移动窗体x个像素,垂直移动窗体y个
像素,x为负数,将向左移动窗体,y为负数,将向上移动窗体moveTo(x,y)移动窗体左上角到相对于屏幕左上角的(x,y)点,当使用
负数做为参数时会吧窗体移出屏幕的可视区域
resizeBy(w,h)――相对窗体当前的大小,宽度调整w个像素,高度调整h个像素。
如果参数为负值,将缩小窗体,反之扩大窗体
resizeTo(w,h)把窗体宽度调整为w个像素,高度调整为h个像素
窗体滚动轴控制
scrollTo(x,y)――在窗体中如果有滚动条,将横向滚动条移动到相对于窗体宽度为x个像素的位置,将纵向滚动条移动到相对于窗体高度为y
个像素的位置
scrollBy(x,y)――如果有滚动条,将横向滚动条移动到相对于当前横向滚动条的x个像素的位置(就是向左移动x像素),将纵向滚动条移动到相对于当前纵向滚动条高度为y个像素的位置(就是向下移动y像素)窗体焦点控制
focus()使窗体或控件获取焦点
blur()与focus函数相反,使窗体或控件失去焦点
新建窗体
open()打开(弹出)一个新的窗体
close()关闭窗体
opener属性——新建窗体中对父窗体的引用,中文"开启者"的意思
window.open方法语法
window.open(url,name,features,replace);
open方法参数说明
*url--要载入窗体的URL
・name--新建窗体的名称(目标,将在a标签的target属性中用到,当与已有窗体名称相同时将覆盖窗体内容).open函数默认的打开窗体的方式为target的_blank弹出方式,因此页面都将以弹出的方式打开
*features--代表窗体特性的字符串,字符串中每个特性使用逗号分隔
*replace--一个布尔值,说明新载入的页面是否替换当前载入的页面,
此参数通常不用指定
open函数features参数说明,如果不使用第三个参数,将打开一个新的普
通窗口
参数名称
类型
说明
height
Number
设置窗体的高度,不能小于100
left
Number
说明创建窗体的左坐标,不能为负值
location
Boolean
窗体是否显示地址栏,默认值为no
resizable
Boolean
窗体是否允许通过拖动边线调整大小,默认值为no
scrollbars
Boolean
窗体中内部超出窗口可视范围时是否允许拖动,默认值为
no
toolbar
Boolean
窗体是否显示工具栏,默认值为no
top
Number
说明创建窗体的上坐标,不能为负值
status
Boolean
窗体是否显示状态栏,默认值为no
width
Number
创建窗体的宽度,不能小于100
特性字符串中的每个特性使用逗号分隔,每个特性之间不允许有空格
open方法返回值为一个新窗体的window对象的引用
对话框
alert(str)弹出消息对话框(对话框中有一个“确定”按钮)
confirm(str)弹出消息对话框(对话框中包含一个“确定”按钮与
“取消”按钮)
prompt(str,defaultValue)弹出消息对话框(对话框中包含一个“确
定”按钮、“取消”按钮与一个文本输入框),由于各个浏览器实现的不同,若没有第二个参数(文本框中的默认值)时也最好提供一个空字符串状态栏
window.defaultStatus属性改变浏览器状态栏的默认显示(当状态
栏没有其它显示时),浏览器底部的区域称为状态栏,用于向用户显示信息
window.status属性临时改变浏览器状态栏的显示
时间等待与间隔函数
setTimeout()暂停指定的毫秒数后执行指定的代码
clearTimeout()取消指定的setTimeout函数将要执行的代码
setInterval()间隔指定的毫秒数不停地执行指定的代码
clearlnterval()取消指定的setlnterval函数将要执行的代码
setTimeout与setInterval方法有两个参数,第一个参数可以为字符串形
式的代码,也可以是函数引用,第二个参数为间隔毫秒数,它们的返回是一个可
用于对应clear方法的数字ID
vartid=setTimeout("alert('1')",1000);alert(tid);
clearTimeout(tid);
History对象,在浏览器历史记录中导航
History对象的属性:
length返回浏览器历史列表中的URL数量
History对象的方法
*back()加载history列表中的前一个URL
*forward()加载history列表中的下一个URL
*go(num)加载history列表中的某个具体页面
Location对象
Location对象的属性
«hash设置或返回从井号(#)开始的URL(锚)
«host设置或返回主机名和当前URL的端口号
*hostname设置或返回当前URL的主机名
«href设置或返回完整的URL
*pathname设置或返回当前URL的路径部分
«port设置或返回当前URL的端口号
«protocol设置或返回当前URL的协议
«search设置或返回从问号(?
)开始的URL(查询部分)
Location对象的方法
*assign()加载新的文档,这与直接将一个URL赋值给Location对象的href属性效果是一样的
*reload()重新加载当前文档,如果该方法没有规定参数,或者参数是
false,它就会用HTTP头If-Modified-Sinee来检测服务器上的文档是
否已改变。
如果文档已改变,reload()会再次下载该文档。
如果文档未
改变,则该方法将从缓存中装载文档。
这与用户单击浏览器的刷新按钮的效果是完全一样的。
如果把该方法的参数设置为true,那么无论文档的
最后修改日期是什么,它都会绕过缓存,从服务器上重新下载该文档。
这与用户在单击浏览器的刷新按钮时按住Shift健的效果是完全一样。
*replace()用新的文档替换当前文档,replace()方法不会在History
对象中生成一个新的纪录。
当使用该方法时,新的URL将覆盖History
对象中的当前纪录。
Navigator对象
Navigator对象的属性
*appCodeName返回浏览器的代码名
*appName返回浏览器的名称
*appVersion返回浏览器的平台和版本信息
*browserLanguage返回当前浏览器的语言
*cookieEnabled返回指明浏览器中是否启用cookie的布尔值
*cpuClass返回浏览器系统的CPU等级
*onLine返回指明系统是否处于脱机模式的布尔值
*platform返回运行浏览器的操作系统平台
*systemLanguage返回OS使用的默认语言
*userAgent返回由客户机发送服务器的user-agent头部的值
*userLanguage返回OS的自然语言设置
框架与多窗口通信
子窗口与父窗口
只有自身和使用window.open方法打开的窗口和才能被JavaScript访
问,window.open方法打开的窗口通过window.opener属性来访问父窗口。
而在
opener窗口中,可以通过window.open方法的返回值来访问打开的窗口!
框架
window.frames集合:
在框架集或包含iframe标签的页面中,frames集合
包含了对有框架中窗口的引用
alert(frames.length);//框架的数目
alert(frames[O].;〃使用下标直接获取对框架中窗口的引用
//不但可以使用下标,还可以使用frame标签的name属性
alert(frames["frame1"].document.title);
在框架集中还可以使用ID来获取子窗口的引用
varframe1=document.getElementByld("frame1");〃这样只是
获取了标签
varframe1Win二frame1.contentWindow;//frame对象的
contentWindow包含了窗口的引用
//还可以直接获取框架中document的引用
varframeDoc二frame1.contentDocument;
alert(frameDoc);//但IE不支持contentDocument属性
子窗口访问父窗口window对象的parent属性
子窗口访问顶层window对象的top属性
浏览器检测
市场上的浏览器种类多的不计其数,它们的解释引擎各不相同,期待所有浏
览器都一致的支持JavaScript,CSS,DOM,那要等到不知什么时候,然而开发者不能干等着那天。
历史上已经有不少方法来解决浏览器兼容问题了,主要分为两种:
1.userAgent字符串检测,2.对象检测;当然,也不能考虑所有的浏览器,我们需要按照客户需求来,如果可以确信浏览网站的用户都使用或大部分使用IE浏
览器,那么你大可放心的使用IE专有的那些丰富的扩展,当然,一旦用户开始转向另一个浏览,那么痛苦的日子便开始了。
下面是市场上的主流浏览器列表:
*InternetExplorer
*MozillaFirefox
*GoogleChrome
*Opera
*Safari
注意,浏览器总是不断更新,我们不但要为多种浏览器作兼容处理,还要对同一浏览器多个版本作兼容处理。
比如IE浏览器,其6.0版本和7.0版本都很流行,因为微软IE随着操作系统绑定安装(之前也是同步发行,微软平均每两年推出一款个人桌面,同样IE也每两年更新一次;直到现在,由于火狐的流行,IE工作组才加快IE的更新),所以更新的较慢,6.0版和7.0版有很大差别。
市场上还存在一些其它浏览器,但由于它们都是使用的上面所列浏览器的核心,或与上面浏览器使用了相同的解释引擎,所以无需多作考虑。
下面是主流的浏览器解释引擎列表:
1.Trident
Trident(又称为MSHTML,是微软的窗口操作系统(WindowS搭
载的网页浏览器—InternetExplorer的排版引擎的名称,它的第一个版本随着1997年10月InternetExplorer第四版释出,之后不断的加入新的技术并随着新版本的InternetExplorer释出。
在未来最新的InternetExplorer第七版中,微软将对Trident排版引擎做了的重大的变动,除了加入新的技术之外,并增加对网页标准的支持。
尽管这些变动已经在相当大的程度上落后了其它的排版引擎。
使用该引擎的主要浏览器:
IE,
TheWorld,MinilE,Maxthon,腾讯TT浏览器。
事实上,这些浏览器是直
接使用了IE核心,因为其userAgent字符串中返回的信息与IE是一模一样的!
2.Gecko
壁虎,英文为"Gecko"。
Gecko是由Mozilla基金会开发的布局引擎
的名字。
它原本叫作NGLayou。
Gecko的作用是读取诸如HTMLCSSXUL和JavaScript等的网页内容,并呈现到用户屏幕或打印出来。
Gecko已
经被许多应用程序所使用,包括若干浏览器,例如Firefox、MozillaSuite、Camino,Seamonkey等等
3.Presto
Presto是一个由OperaSoftware开发的浏览器排版引擎,供Opera
7.0及以上使用。
Presto取代了旧版Opera4至6版本使用的Elektra
排版引擎,包括加入动态功能,例如网页或其部分可随着DOk及Script
语法的事件而重新排版。
Presto在推出后不断有更新版本推出,使不少错误得以修正,以及阅读Javascript效能得以最佳化,并成为速度最快的引擎。
4.KHTML
是HTML网页排版引擎之一,由KDE所开发。
KDE系统自KDE2版起,在档案及网页浏览器使用了KHTM引擎。
该引擎以C++编程语言所写,并以LGPL授权,支援大多数网页浏览标准。
由于微软的InternetExplorer的占有率相当高,不少以FrontPage制作的网页均包含只有IE才能读取的非标准语法,为了使KHTM引擎可呈现的网页达到最多,部分IE专属的语法也一并支援。
目前使用KHTM的浏览器有Safari和GoogleChroma而KHTMI也产生了许多衍生品,如:
WebKit,WebCore引擎
利用userAgent检测
下面是各大浏览器使用弹窗显示的userAgent字符串
IE浏览器:
Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;.NET
CLR
火狐浏览器:
Mozilla/5.0(Windows;U;WindowsNT5.1;zh-CN;rv:
Gecko/20Firefox/3.0.4
1
确定
■停止执厅此页面中的脚本
Opera浏览器:
Opera/9.64(WindowsNT5.1;U;EditionIBIS;zh-cn)
Presto/2.1.1
Safari浏览器:
Mozilla/5.0(Windows;U;WindowsNT5.1;zh-CN)
AppleWebKit/528.16(KHTML,likeGecko)Version/4.0Safari/528.16
GoogleChrome浏览器:
Mozilla/5.0(Windows;U;WindowsNT5.1;en-US)
AppleWebKit/530.5(KHTML,likeGecko)Chrome/Safari/530.5
可以使用下面的代码进行浏览器检测
varBrowser={islE:
"MSIE")!
=-1,isFF:
"Firefox")!
=-1,isOpera:
"Opera")!
=-1,isSafari:
"Safari")!
=-1
};
但这样做并不是万无一失的,一个特例便是Opera可以使用userAgent伪装
自己。
下面是伪装成IE的userAgent:
Mozilla/5.0(WindowsNT5.1;U;EditionIBIS;zh-cn;rv:
Gecko/Firefox/2.0.0Opera9.64;在完全伪装的情况下,
最后的“Opera9.64”这个字符串也不会出现,但Opera也有特殊的识别自身的方法,它会自动声明一个opera全局变量!
不但如此,我们的检测还忽略了一点,就是那些使用相同引擎而品牌不同的
浏览器,所以,直接检测浏览器是没有必要的,检测浏览器的解释引擎才是有必varBrowser={
islE:
"MSIE")>-1&&!
window.opera,isGecko:
"Gecko")>-1&&!
window.opera&&"KHTML")==-1,isKHTML:
"KHTML")>-1,isOpera:
"Opera")>-1
};
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BOM 浏览器 对象 模型 BrowserObjectModel