首頁 > web前端 > js教程 > JavaScript 瀏覽器物件模型BOM使用介紹_基礎知識

JavaScript 瀏覽器物件模型BOM使用介紹_基礎知識

WBOY
發布: 2016-05-16 16:04:24
原創
1351 人瀏覽過

BOM也叫做瀏覽器物件模型,它提供了很多物件,用於存取瀏覽器的功能;這些功能與任何網頁內容無關;
BOM缺少規範,每個瀏覽器提供者都按照自己的想法去擴展它,那麼瀏覽器共有對象就成了事實的標準;

一 window物件

// BOM的核心对象是window,它表示浏览器的一个实例;
// window对象处于JavaScript结构的最顶层;
// 对于每个打开的窗口,系统都会自动为其定义window对象;
// window对象同时扮演着ECMAScript中Global对象的角色,因此所有在全局作用域中声明的变量/函数都会变成window对象的属性和方法;
// PS:尝试访问未声明的变量会抛出错误,但是通过查询window对象,可以知道某个可能未声明的对象是否存在;
  var newValue = oldValue;        // =>ReferenceError:oldValue is not defined;
  var newValue = window.oldValue;     // =>undefined;
登入後複製

1.window物件的屬性與方法
window物件有一系列的屬性,這些屬性本身也是物件;

(1).屬性
屬性 意義
closed 當視窗關閉時為真;
defaultStatus 視窗底部狀態列顯示的預設狀態資訊;
document 視窗中目前顯示的文件物件;
frames 視窗中的框架物件陣列;
history 保存有視窗最近載入的URL;
length 視窗中的框架數;
location 目前視窗中的URL;
name 視窗名;
offscreenBuffering 用於繪製新視窗內容並在完成後複製已存在的內容,控制螢幕更新;
opener 開啟目前視窗的視窗;
parent 指向包含另一個視窗的視窗(由框架使用);
screen 顯示螢幕相關資訊,如高度/寬度(以像素為單位;)
self 指示目前視窗;
status 描述使用者互動導致的狀態列的暫時訊息;
top 包含特定視窗的最頂層視窗(由框架使用);
window 指示目前視窗,與self等效;

(2).方法
alert(text) 建立警告對話框,顯示一則訊息;
blur() 將焦點從視窗移除;
clearInterval(interval) 清除先前設定的定時器間隔;
clearTimeOut(timer) 清除先前設定的逾時;
close() 關閉視窗;
confirm() 建立一個需要用於確認的對話框;
focus() 將焦點移至視窗;
open(url,name,[options]) 開啟一個新視窗並傳回新window物件;
prompt(text,defaultInput) 建立對話方塊要求使用者輸入訊息;
scroll(x,y) 在視窗中捲動到一個像素點的位置;
setInterval(expression,milliseconds) 經過指定時間間隔計算一個表達式;
setInterval(function,millisenconds,[arguments]) 經過指定時間間隔後呼叫一個函數;
setTimeout(expression,milliseconds)        在定時器超過後計算一個表達式;
steTimeout(function,milliseconds,[arguments]) 在定時器超過後呼叫一個函數;
print() 調出列印對話框;
find() 調出找對話框;
// window下的屬性與方法,可以使用window.屬性、window.方法()或直接屬性、方法()的呼叫;
// window.alert(text)=alert(text);

2.系統對話框
瀏覽器透過alert()/confirm()和prompt()方法呼叫系統對話框向使用者顯示資訊;
系統對話方塊與瀏覽器中顯示的網頁沒有關係,也不包含HTML;
它們的外觀由作業系統及(或)瀏覽器設定決定,而不是由CSS決定;
這幾個方法打開的對話框都是同步和模態的;也就是說,顯示這些對話框的時候代碼會停止運行,而關掉這些對話框後代碼又會恢復執行;

// 弹出警告
  alert('警告');

// 确认和取消
  if(confirm('请确定或取消'){          // confirm()本身有返回值;
    alert('您选择了确定');           // 按确定,返回true值;
  })else{
    alert('您选择了取消');           // 按取消,返回false值;
  }

// 输入提示框
  var num = prompt('请输入一个数字',0);     // 第一个参数是文字提示;第二个参数是输入框模式填充值;并返回输入框中的值;
  alert(num);                 // 将prompt()方法返回的值赋给变量num;并弹出;

// 调用打印及查找对话框
  print();                   // 打印; 弹出浏览器打印窗口;
  find();                   // =>boolean;页面有匹配的查找内容返回true;相对于Ctrl+F;

// 状态栏
  defaultStatus = '状态栏默认文本';       // 浏览器底部状态栏初始默认值;
  status = '状态栏文本';            // 浏览器底部状态栏设置值;
登入後複製

3.新建窗口(open())

// 使用window.open()方法可以导航到一个特定的URL,也可以打开一个新的浏览器窗口;
// 它接收四个参数:
// (1).要加载的URL;
// (2).窗口的名称或窗口目标;
// (3).一个特定字符串;
// (4).一个表示新页面是否取代浏览器记录中当前加载页面的布尔值;
open('www.baidu.com'); // chrome-search://local-ntp/www.baidu.com;打开失败;需要添加http://;
open('http://www.baidu.com'); // 新建页面并跳转到百度;
open('http://www.baidu.com','搜索引擎'); // 新建页面 打开百度页面 并命名窗口;并不会自动跳转;并且再次调用时只是刷新那个页面;
open('http://www.baidu.com','_parent'); // 在本页面打开百度;'_blank'是指定新页面打开;
// 第三个字符串参数
设置 值 说明
width 数值 新窗口的宽度,不小于100px;
height 数值 新窗口的高度,不小于100px;
top 数值 新窗口的Y坐标,不能是负值;
left 数值 新窗口的X坐标,不能是负值;
location boolean 是否在浏览器窗口中显示地址栏;不同浏览器默认值不同;
menubar boolean 是否在浏览器窗口显示菜单栏,默认为no;
resizable boolean 是否通过拖动浏览器窗口边框来改变大小;默认no;
scrollbars boolean 如果页面内容显示不下,是否显示滚动条;默认no;
status boolean 是否在浏览器窗口中显示状态栏,默认no;
toolbar boolean 是否在浏览器中显示工具栏;默认no;
fullscreen boolean 浏览器窗口是否最大化;仅IE支持;
open('http://www.baidu.com','baidu','width=400,height=400,top=200,left=200,toolbar=yes');

// open()本身返回window对象
var box = open(); // 返回了一个window对象,打开了一个新空白页面;
box.alert(''); // 然后指定在open()返回的对象打开的新页面弹窗;

// 字窗口操作父窗口
document.onclick = function(){         // 在新的窗口中点击docuement对象;
opener.document.write('子窗口让我输出的!');// 此时在产生它的父窗口会生成文字内容;
}

4.窗口的位置和大小

(1).窗口的位置
// 用来确定和修改window对象(浏览器窗口)相对于屏幕的位置:
// IE+Safari+Opera+Chrome都提供了screenLeft和screenTop属性,
// Firefox提供了screenX和screeY属性;
// 他们分别表示窗口看相对于屏幕左边和上边的位置;
  
// 确定窗口的位置=>IE
  alert(screenLeft);              // 浏览器左侧离屏幕的距离;
// 确定窗口的位置=>Firefox
  alert(screenX);                // 浏览器左侧离屏幕的距离;

// 跨浏览器的方法
  var leftX = (typeof screenLeft == 'number') ? screenLeft : screenX;
  // 判断检测的screenLeft是否是数值,若是则使用screenLeft的值,否则使用screenX的值;
登入後複製

(2).窗口的大小
// 检测浏览器窗口本身及边框的尺寸:outerWidth和outerHeight;
  alert(outerWidth);
  alert(outerHeight);
// 检测页面大小属性:innerWidth和innerHeight;
  alert(innerWidth);
  alert(innerHeight);
// PS:IE没有提供当前浏览器窗口尺寸的属性; 在DOM中有提供相关的方法;

// 在IE及其他浏览器中,提供了:document.documentElement.clientWidth和document.documentElement.clientHeight;来保存页面窗口的信息;
// PS:在IE6中,上述属性在标准模式下才有效;如果是怪异模式,就必须通过document.body.clientWidth和document.body.clientHeight;
// 如果是Firefox等浏览器,直接使用innerWidth和innerHeight;
  var width = window.innerWidth;        // 这里要加window,因为IE会无效;
  var height = window.innerHeight;
  if(typeof width != 'number'){         // IE6浏览器
    if(document.compatMode == 'CSS1Compat'){ // 判断是IE6标准模式;使用documentElement;
      width = document.documentElement.clientWidth;
      height = document.documentElement.clientHeight;
    }else{                  // 否则是IE6非标准模式;使用body;
      width = document.body.clientWidth;
      height = document.body.clientHeight;
    }
  }
  // PS:以上方法可以通过不同浏览器取得各自的浏览器窗口可视部分的大小;
  // document.compatMode可以确定页面是否处于标准模式;
登入後複製
// 调整浏览器位置;
  moveTo(0,0);                 // 移动到(0,0)坐标;IE有效;
  moveBy(10,10);                // 向下和向右分别移动10px;IE有效;

// 调整浏览器大小
  resizeTo(200,200);              // 调整大小;
  resizeBy(200,200);              // 扩展收缩大小;
登入後複製

5.间歇调用和超时调用
1 // JavaScript是单线程语言,但它允许通过设置超时值和间歇时间值来调度代码在特定的时刻执行;
2 // 超时值:在指定的时间过后执行代码;
3 // 间隔值:每隔指定的时间就执行一次代码;

// 超时调用使用window对象的setTimeout()方法;
// 它接受两个参数:要执行的代码和毫秒数;
  setTimeout(function(){            // 直接使用函数传入的方法,扩展性好,性能更加;
    alert('警告!');
  },1000);
// 调用setTimeout()之后,该方法会返回一个数值ID,表示超时调用;
// 这个超时调用的ID是计划执行代码的唯一标识符,可以通过它来取消超时调用;
// 要取消尚未执行的超时调用计划,可以调用clearTimeout()方法并将相应的超时调用ID作为参数传递给它;
  var box = setTimeout(function(){       // 将超时调用的ID赋值给变量box;
    alert('超时调用');
  },1000);
  clearTimeout(box);              // 将ID传入取消调用方法;
登入後複製
// 间歇调用使用window对象的setInterval()方法;
// 它会按照指定的时间间隔重复执行代码,直至间歇调用被取消或页面被卸载;
// 它接收的参数与setTimeout()相同;
  var pox = setInterval(function(){
    alert('间隔调用');
  },1000);
  clearInterval(pox);              // 取消间歇调用;

// 利用setInterval()设置一个5秒的定时器;
  var num = 0;                 // 设置起始秒;
  var max = 5;                 // 设置终止秒;
  setInterval(function(){
    num++;                  // 递增num;
    if(num == max){              
      clearInterval(this);         // 取消间隔调用,this表示方法本身;一直跟踪间隔调用的ID;
      alert('5秒后弹窗');
    }
  },1000);
登入後複製
// 一般使用超时调用来模拟间隔调用是一种最佳模式;
// 因为使用间隔调用需要根据情况来取消ID,并且可能造成同步的一些问题;后一个间歇调用可能会在前一个间歇调用结束之前启动;
  var num = 0;
  var max = 5;
  function box(){
    num++;
    if(num == max){
      alert('5秒后弹窗');
    }else{
      setTimeout(box,1000);          // 隔1秒之后再次执行一个超时调用;
    }
  };
  setTimeout(box,1000);              // 执行定时器; 
  // PS:在使用超时调用时,没必要跟踪超时调用ID,因为每次执行之后,如果不再设置另一个超时调用,调用就会自动停止;
登入後複製

二 location对象

location是BOM对象之一,它提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能;
事实上,location对象是window对象的属性,也是document对象的属性;
alert(location); // 获取当前的URL

(1).location对象的属性
属性 描述的URL内容
hash 如果该部分存在,表示锚点部分;
host 主机名:端口号;
hostname 主机名;
href 整个URL;
pathname 路径名;
port 端口号;
protocol 协议部分;
search 返回URL的查询字符串('?gws_rd=ssl#safe=strict&q=ab'),这个字符串以问号开头;
(2).location对象的方法
assign() 跳转到指定页面,与href等效;
reload() 重载当前URL;
replace() 用新的URL替换当前页面;

location.hash = '#1'; // 设置#后的字符串,并跳转;
location.hostname = 'Jack'; // 设置主机名;
location.search = '?id=5'; // 设置?后的字符串;

// 在Web开发中,我们经常需要获取诸如?id=5&search=ok这种类型的URL的键值对;
// 通过location,我们可以写一个函数,来一一获取;
  function getArgs(){
    // 创建一个存放键值对的数组;
    var args = [];
    // 去除?号;
    var qs = location.search.length>0?location.search.substring(1):'';
    // 按&字符串拆分数组;
    var items = qs.split('&');
    var item = null, name = null, value = null;
    //遍历
    for(var i = 0; i<items.length; i++){
      item = items[i].split('=');
      name = decodeURIComponent(item[0]);  // 因为查询字符串被浏览器编码过;
      value = decodeURIComponent(item[1]);// 每个查询字符串参数都变成了args对象的属性;
      // 把键值对存放到数组中;
      args[name] = value;
    }
    return args;
  }
  var args = getArgs();
  alert(args['id']);              // 获取URL中id对应的值;
登入後複製

复制代码 代码如下:

location.assign('http://www.baidu.com');      // 跳到指定的URL;2
location.reload();                            // 最有效的重新載入,有可能從快取中載入; location.reload(true);                        // 強制載入,從伺服器來源重新載入; locatioin.replace('http://www.baidu.com');    // 在本頁跳到百度頁面,並且可以避免產生跳轉的歷史記錄;


三 history物件

history物件是window物件的屬性,它保存使用者上網的記錄,從視窗被開啟的那一刻算起;

(1).history物件的屬性

length                 的記錄數;

(2).history物件的方法

back()                以目前一個URL,類似後退器歷程;
forward()             前往瀏覽器歷史條目下一個URL,類似前進;
go(num)               瀏覽器在history物件中向前或向後;

複製程式碼 程式碼如下:
    function back(){
        history.back();
    }
    function forward(){
        history.forward();
    }
    function go(num){
        history.go(num);
    }
// PS:可以透過判斷history.length == 0,得到是否有歷史記錄;


四 小結

 瀏覽器物件模型(BOM)以window物件為依托,表示瀏覽器視窗以及頁面可見區域;

 同時window物件還是ECMAScript中的Global物件,因而所有全域變數和函數都是它的屬性,且所有原生的建構子及其他函數也都存在於它的命名空間下;

 (1).使用location物件可以透過程式來存取瀏覽器的導航系統;設定對應的屬性,可以逐段或整體性地修改瀏覽器的URL;
 (2).呼叫replace()方法可以導航到一個新的URL,同時該URL會替換瀏覽器歷史記錄中目前顯示的頁面;
 (3).screen物件:保存著與客戶端顯示器有關的資訊,這些資訊一般只用於網站分析;
 (4).history物件:為存取瀏覽器的歷史記錄開了一個小縫隙,開發人員可以據此判斷歷史記錄的數量,也可以在歷史記錄中向後或向前導航到任意頁面;

相關標籤:
bom
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板