BOM(浏览器对象模型)主要用于管理浏览器窗口,它提供了大量独立的、能够与浏览器窗口进行互动的功能,这些功能与任何网页内容无关。浏览器窗口的window对象是BOM的顶层对象,其余对象都是该对象的子对象。javascript
window对象是BOM的核心,表明浏览器窗口的一个实例。在全局做用域中声明的全部变量和函数也是window对象的属性和方法。html
经过window对象可用访问浏览器窗口。java
浏览器对象简单说明以下:程序员
window数组 |
客户端JavaScript中的顶层对象。浏览器 |
navigator安全 |
包含客户端有关浏览器的信息。app |
screen函数 |
包含客户端显示屏的信息。测试 |
history |
包含浏览器窗口访问过的URL信息。 |
location |
包含当前网页文档的URL信息。 |
document |
包含整个HTML文档,可被用来发访问文档内容,及其全部页面元素。 |
1.1.2全局做用域
客户端JavaScript代码都在全局上下文环境中运行,window对象提供了全局做用域。
下面用法:
var a = '我是程序员'; window.b = 'window.b'; c = '我喜欢js'; document.write(delete window.a); document.write(delete window.b); document.write(delete window.c + '<br>'); document.write(window.a); document.write(window.b); document.write(window.c);
使用var语句声明全局变量,window会为这个属性定义一个名为‘configgurable’的特性。
window对象定义了3我的机交互的接口方法:
alert():简单的提示对话框,由浏览器向用户弹出提示性信息。该方法包含一个可选的提示信息参数。
confirm():简单的提示对话框,由浏览器向用户弹出提示性信息。不过该方法弹出的对话框包含两个按钮,‘确认’和‘取消’。
prompt():弹出提示对话框,能够接收用户输入的信息,并把用户输入的信息返回。
用法1:
var user = prompt('请输入你的用户名:'); if (!!user) { var ok = confirm('你输入的用户名为:\n' + user + '\n请确认。'); if (ok) { document.write('欢迎您:\n' + user); } else { user = prompt('请从新输入你的用户名:'); document.write('欢迎您:\n' + user); } } else { user = prompt('请输入你的用户名:'); }
这3个仅接收纯文本信息,用户只能使用空格、换行符和各类符号来格式化提示对话框中的显示文本。不一样浏览器对于这3个对话框的显示效果略有不一样。
用法2:
window.alert = function (title, info) { var box = document.getElementById('alert_box'); var html = '<dl><dt>' + title + '</dt><dd>' + info + '</dd><\/dl>'; if (box) { box.innerHTML = html; box.style.display = 'block'; } else { var div = document.createElement('div'); div.id = 'alert_box'; div.style.display = 'block'; document.body.appendChild(div); div.innerHTML = html; } } alert('我是程序员', '我喜欢Js!');
使用window对象的moveTo()和moveBy()方法能够将窗口精确地移动到一个新位置。这两个方法接收两个参数,其中moveTo()接收的是新位置的x和y坐标值,而moveBy()接收的是在水平和垂直方向上移动的像素数。
下面用法:
window.moveTo(0, 0); window.moveBy(0, 100); window.moveTo(200, 300); window.moveBy(-50, 0);
window对象包含4个定时器专用方法,使用他们能够实现倒霉定时运行,避免连续运行。就能够设计动画。
定义:
setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式。
语法:
var o=setTimeout(code,millisec)
参数:
code | (必需。要延时执行的代码字符串。) |
millisec | 必需。在执行代码前需等待的毫秒数。) |
下面用法:
var o = document.getElementsByTagName('body')[0].childNodes; for (var i = 0; i < o.length; i++) { o[i].onmouseover = function (i) { return function () { f(o[i]); } }(i); } function f(o) { var out = setTimeout(function () { document.write(o.tagName); }, 500); }
定义:
clearTimeout()方法可取消由setTimeout()方法设置的timeout。
语法:
clearTimeout(id_of_settimeout)
参数:
id_of_settimeout(由setTimeout()返回的ID值。该值标识要取消的延迟执行代码块。)
下面用法:
var o = document.getElementsByTagName('body')[0].childNodes; for (var i = 0; i < o.length; i++) { o[i].onmouseover = function (i) { return function () { f(o[i]); } }(i); o[i].onmouseout = function (i) { return function () { clearTimeout(o[i].out); } }(i); } function f(o) { o.out = setTimeout(function () { document.write(o.tagName); }, 500); }
定义:
setInterval()方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。
setInterval()方法会不停地调用函数,直到clearInterval()被调用或窗口被关闭。由setInterval()返回的ID值可用做clearInterval()方法的参数。
语法:
setInterval(code,millisec[,"lang"])
参数:
code(必需。要调用的函数或要执行的代码串。)
millisec(必须。周期性执行或调用 code 之间的时间间隔,以毫秒计。)
下面用法:
var t = document.getElementsByTagName('input')[0]; var i = 959; var out = setInterval(f, /*24 * 60 * 60 */ 1000); function f() { t.value = i--; if (i <= 0) { crearTimeout(out); document.write('冬奥会已到!'); } }
在动画设计中,setInterval()方法适合在不肯定的时间内持续执行某个动做,而setInterval()方法适合在有限的时间内执行能够肯定起点和终点的动画。
navigator对象包含了浏览器的基本信息,如名称、版本和系统等。利用它的属性来读取客户端基本信息。
浏览器检测的方法有多种。
经常使用方法包括2种:
特征检测法 |
字符串检测法 |
特性检测法就是根据浏览器是否支持特定功能来决定操做的方式。
下面用法:
if (document.getElementsByName) { var a = document.getElementsByName('p'); } else if (document.getElementsByTagName) { var a = document.getElementsByTagName('p'); }
使用用户代理字符串检测浏览器类型。
下面用法:
var s = window.navigator.userAgent; console.log(s);
可使用navigator对象的plugins属性实现。而plugins是一个数组。
该数组中的每一项都包含下列属性:
name |
插件的名字。 |
description |
插件的描述。 |
filename |
插件的文件名。 |
length |
插件所处理的MIME类型。 |
下面用法:
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; } document.write(hasPlugin('Flash')); document.write(hasPlugin('QuickTime')); document.write(hasPlugin('Java'));
location对象存储当前页面与位置相关的信息,表示当前显示文档的Web地址。使用location对象,结合字符串方法能够抽取URL中查询字符串的参数值。
用法1:
var queryString = function () { var q = location.search.substring(1); var a = q.split('&'); var o = {}; for (var i = 0; i < a.length; i++) { var n = a[i].indexOf('='); if (n == -1) continue; var v1 = a[i].substring(o, n); var v2 = a[i].substring(n + 1); o[v1] = unescape(v2); } return o; }; var f1 = queryString(); for (var i in f1) { document.write(i + '=' + f1[i]); }
用法2:跳转网页。
location = 'http://www.bj-xinhua.com/?bdpz';
history对象存储浏览器窗口的浏览历史,经过window对象的history属性能够访问该对象。实际上,history对象存储最近访问的、有限条目的URL信息。为了保护客户端浏览信息的安全和隐私,history对象禁止Js脚本直接操做这些访问信息。
history对象容许使用length属性读取列表中URL的个数,并能够调用back()、forward()和go()方法访问数组中的URL。
back():返回到前一个URL。
forward():访问下一个URL。
go():该方法比较灵活,它能根据参数决定可访问的URL。
下面用法:
frames[1].history.back();
screen对象存储客户端屏幕信息,这些信息能够用来探测客户端硬件的基本配置。知足不一样用户的显示要求。
下面用法:
function center(url) { var w = screen.availWidth / 2; var h = screen.availHeight / 2; var t = (screen.availHeight - h) / 2; var l = (screen.availWidth - w) / 2; var p = 'top=' + t + ',left=' + l + ',width=' + w + ',height=' + h; var win = window.open(url, 'url', p); win.focus(); } center('file:///D:/jsBOM%E6%93%8D%E4%BD%9C/11history.html');
在浏览器窗口中,每一个widow对象都会包含一个document属性,该属性引用窗口中显示HTML文档的document对象。
下面用法:
window.onload = function () { document.body.onclick = f; } function f() { parent.frames[1].document.open(); parent.frames[1].document.write('<h2>我是程序员</h2>'); parent.frames[1].document.close(); }