关闭

JavaScript基础——浏览器对象模型(BOM)

标签: javascriptBOM
260人阅读 评论(0) 收藏 举报
分类:

浏览器对象模型(BOM)以window对象为依托,表示浏览器窗口以及页面可见区域。

同时,window对象还是ECMAScript中的Global对象,因而所有全局变量和函数都是它的属性,

且所有原生的构造函数及其他函数也都存在于它的命名空间下。BOM的组成部分的主要内容有:

1)在使用框架时,每个框架都有自己的window对象以及所有原生构造函数及其他函数的副本。

   每个框架都保存在frames集合中,可以通过位置或通过名称来访问。

2)有一些窗口指针,可以用来引用其他框架,包括父框架。

3)top对象始终指向最外围的框架,也就是整个浏览器窗口。

4) parent对象表示包含当前框架的框架,而self对象则回值window。

5) 使用location对象可以通过编程方式来访问浏览器的导航系统。设置相应的属性,可以逐级或整体性地修改浏览器的URL。

6)调用replace()方法可以导航到一个新URL,同时该URL会替换浏览器历史记录中当前显示的页面。

7)navigator对象提供了与浏览器有关的信息。到底提供哪些信息,很大程度上取决于用户的浏览器;

   不过,也有一些公共的属性(如userAgent)存在于所有浏览器中。

BOM中还有两个对象:screen和history,但它们的功能有限。screen对象中保存着与客户端显示器有关的信息,

这些信息一般只用于站点分析。history对象为访问浏览器的历史记录开了一个小缝隙,

开发人员可以据此判断历史记录的数量,也可以在历史记录中向后或向前导航到任意页面。

/*
 * BOM
 */
function cl(x){
    console.log(x);
}
/**
 *8.1 window对象
 */
//8.1.1全局作用域
var age=29;
function sayAge(){
    cl(this.age);
}
cl(window.age);//=>29
sayAge();   //=>29
window.sayAge();//=>29
//全局变量不能通过delete操作符删除,直接在window对象上的定义的属性可以
var age2=28;
window.color="red";
delete window.age2;
delete window.color;
cl(window.age2);//=>28
cl(window.color);//=>undefined
//尝试访问未声明的变量会抛出错误,但是通过查询window对象,可以知道某个可能未声明的变量是否存在
//var newValue=oldValue;//会抛出错误,因为oldValue未定义
var newValue=window.oldValue;//不会抛出错误,这是属性查询,newValue的值是undefined

//8.1.2 窗口关系及框架
//访问某个框架的不同方式
//window.frames[1];
//window.frames["leftFrame"];
//top.frames[1];
//top.frames["leftFrame"];
//frames[1];
//frames["leftFrame"];

//8.1.3 窗口位置
//跨浏览器取得窗口左边和上边的位置
var leftPos=(typeof window.screenLeft=="number")?window.screenLeft:window.scrollX;
var topPos=(typeof window.screenTop=="number")?window.screenTop:window.scrollY;
//移动窗口到一个新位置(可能会被浏览器禁用)
//将窗口移动到屏幕左上角
window.moveTo(0,0);
//将窗口向下移动100像素
window.moveBy(0,100);
//将窗口移动到(200,300)
window.moveTo(200,300);
//将窗口向左移动50像素
window.moveBy(-50,0);

//8.1.4 窗口大小
//获取页面视口的大小
var pageWidth=window.innerWidth,
    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=document.body.clientHeight;
    }
}
//调整浏览器窗口的大小(可能被浏览器禁用)
//调整到100*100
window.resizeTo(100,100);
//调整到200*150
window.resizeBy(100,50);
//调整到300*300
window.resizeTo(300,300);

//8.1.5 导航和打开窗口
//8.1.5.1 弹出窗口:window.open()
var sinaWin=window.open("http://www.sina.com.cn/","_blank","height=400,width=400,top=10,left=10,resizable=yes");
//调整大小
sinaWin.resizeTo(500,500);
//移动位置
sinaWin.moveTo(100,100);
//关闭新窗口
sinaWin.close();
cl(sinaWin.opener==window);//true 指向调用window.open()的窗口或框架
//8.1.5.2 安全限制
//8.1.5.3 弹出窗口屏蔽程序
//检测弹出窗口是否被屏蔽了
var blocked=false;
try{
    var baiduWin=window.open("http://www.baidu.com","_blank","height=600,width=600,top=100,left=100,resizable=yes");
    if(baiduWin==null){
        blocked=true;
    }
}catch(ex){
    blocked=true;
}
if(blocked){
    alert("弹出窗口被浏览器内置的屏蔽程序阻止了");
}

//8.1.6
//间歇调用和超时调用:setTimeout()、setInterval()
//设置超时调用
var timeoutId=setTimeout(function(){
    baiduWin.close();
},3000);
//取消超时调用
clearTimeout(timeoutId);
var num=0;
var max=10;
var intervalId=null;
function incrementNumber(){
    num++;
    //如果执行次数达到了max设定的值,则取消后续尚未执行的调用
    if(num==max){
        clearInterval(intervalId);
        alert("结束");
    }
}
intervalId=setInterval(incrementNumber,500);

//8.1.7 系统对话框 alert()、confirm()、prompt()、find()、print()
if(confirm("你确定要参加吗?")){
    alert("你确定了参加此次活动");
}else{
    alert("你取消了参加此次活动");
}
var result=prompt("请输入您的姓名","Jason");
if(result!==null){
    alert("欢迎你,"+result);
}
//显示"查找"对话框
window.find();
//显示"打印"对话框
window.print();

/*
 * BOM
 */
function cl(x){
    console.log(x);
}
/**
 *8.2 location对象
 */
//location对象既是window对象的属性,也是document对象的属性
cl(location.hash);      // (空字符串)
cl(location.host);      // localhost:63342
cl(location.hostname);  // localhost
cl(location.href);      // http://localhost:63342/IDEA-workspace/JsHigh_book/L08/l08.html
cl(location.pathname);  // /IDEA-workspace/JsHigh_book/L08/l08.html
cl(location.port);      // 63342
cl(location.protocol);  // http:
cl(location.search);    // (空字符串)
//8.2.1 查询字符串参数
//解析查询字符串,然后返回包含所有参数的一个对象
function getQueryStringArgs(){
    //取得查询字符串并去掉开头的问号
    var qs=(location.search.length>0?location.search.substring(1):""),
        //保存数据的对象
        args={},
        //取得每一项
        items=qs.length?qs.split("&"):[],
        item=null,
        name=null,
        value=null,
        //在for循环中使用
        i= 0,
        len=items.length;
    //逐个将每一项添加到args对象中
    for(i=0;i<len;i++){
        item=items[i].split("=");
        name=decodeURIComponent(item[0]);//解码被编码过的name
        value=decodeURIComponent(item[1]);//解码被编码过的value
        if(name.length){
            args[name]=value;
        }
    }
    return args;
}
//假设查询字符串是 ?q=javascript&num=10
var args=getQueryStringArgs();
args["q"];      //"javascript"
args["num"];    //"10"

//8.2.2 位置操作
//改变浏览器的位置
 location.assign("http://www.baidu.com/");
 window.location="http://www.sina.com.cn/";
 location.href="http://www.taobao.com/"; //最常用
//调用replace()方法,禁用后退按钮,让用户不能返回前一个页面
setTimeout(function(){
    location.replace("http://www.qq.com/");
},1000);
//reload():重新加载当前显示的页面
location.reload();//重新加载(有可能从缓存中加载)
location.reload(true);//重新加载(从服务器重新加载)

/*
 * BOM
 */
function cl(x){
    console.log(x);
}
/**
 *8.3 navigator对象
 */
cl(navigator.appCodeName);  //=>Mozilla
cl(navigator.appName);      //=>Netscape
cl(navigator.appVersion);   //=>5.0 (Windows)
cl(navigator.cookieEnabled);//=> true
cl(navigator.javaEnabled());//=>false
cl(navigator.language);     //=>zh-CN
cl(navigator.mimeTypes);    //=> MimeTypeArray
cl(navigator.onLine);       //=>true
cl(navigator.platform);     //=>Win32
cl(navigator.plugins);      //=> PluginArray
cl(navigator.product);      //=>Gecko
cl(navigator.productSub);   //=>20100101
cl(navigator.systemLanguage);//=>undefined
cl(navigator.userAgent);    //=>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0
cl(navigator.userLanguage); //=>undefined

//8.3.1 检测插件
//在W3C浏览器中检测插件的方法
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;
}
//在IE浏览器中检测插件的方法
function hasIEPlugin(name){
    try{
        new ActiveXObject(name);
        return true;
    }catch(ex){
        return false;
    }
}
//检测所有浏览器中的Flash
function hasFlash(){
    var result=hasPlugin("Flash");
    if(!result){
        result=hasIEPlugin("ShockwaveFlash.ShocksaveFlash");
    }
    return result;
}
cl(hasFlash());//=>true

//8.3.2 注册处理程序(html5内容)
//将一个站点注册为处理RSS阅读器源的处理程序
//navigator.registerContentHandler("application/rss+xml","http://www.somereader.com?feed=%s","Some Reader");
//将一个应用程序注册为默认的邮件客户端
//navigator.registerProtocoHandler("mailto","http://www.163.com?cmd=%s","Some Mail Client");

/**
 * 8.4 screen对象
 */
cl(screen.availHeight); //=>1040
cl(screen.availWidth);  //=>1920
cl(screen.availTop);    //=>0
cl(screen.availLeft);   //=>0
cl(screen.colorDepth);  //=>24
cl(screen.height);      //=>1080
cl(screen.width);       //>1920

/**
 * 8.5 history对象
 */
//后退一页
history.go(-1);
//前进一页
history.go(1);
//前进两页
history.go(2);
//跳转到最近的baidu.com页面
history.go("baidu.com");
//后退一页
history.back();
//前进一页
history.forward();
//检测用户是否一开始就打开了你的页面
if(history.length==0){
    cl("这是用户打开的第一个窗口");
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:444577次
    • 积分:6083
    • 等级:
    • 排名:第4270名
    • 原创:209篇
    • 转载:80篇
    • 译文:0篇
    • 评论:47条
    文章分类
    最新评论