JS 浏览器BOM(浏览器对象模型)

JS Window-浏览器对象模型

  • 浏览器对象模型(BOM)使JS有能力与浏览器对话
  • 由于现代浏览器几乎实现了JS交互性方面的相同方法和属性,因此常被认为是BOM的方法和属性。

Window对象

  • 所有浏览器都支持Window对象,它表示浏览器窗口。

  • 所有JS全局对象、函数以及变量均会自动成为window对象的成员。

  • 全局变量是window对象的属性

  • 全局函数是window对象的方法

  • HTML DOM的document也是window对象的属性之一

         window.document.getElementById("header");
    

Window尺寸

  • 有三种方法可以确定浏览器窗口的尺寸

  • 对于IE、Chrome、Firefox、Opera、Safari

    • window.innerHeight - 浏览器窗口的内部高度(包括滚动条)
    • window.innerWidth - 浏览器窗口的内部宽度(包括滚动条)
  • 对于IE8、7、6、5

    • document.documentElement.clientHeight
    • document.documentElement.clientWidth
  • 或者

    • document.body.clientHeight
    • document.body.clientWidth
  • 实例:获取浏览器高度宽度(涵盖所有浏览器)

var w=window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;
var h=window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;

其他Window方法

  • window.open() - 打开新窗口
  • window.close() - 关闭当前窗口
  • window.moveTo() - 移动当前窗口
  • window.resizeTo() - 调整当前窗口

JS 获取有关用户屏幕信息

  • window.screen 对象包含有关用户屏幕的信息
  • window.screen 对象在编写时可以不使用window这个前缀
    • screen.avaliWidth - 可用的屏幕宽度
    • screen.avaliHeight - 可用的屏幕高度

Window Screen 可用宽度

  • screen.avaliWidth 属性返回访问者屏幕的宽度,以像素为单位,减去界面特性,比如窗口任务栏这些。
   <script>
document.write("可用宽度: " + screen.availWidth);
</script>

Window Screen 可用高度

  • screen.avaliHeight 属性返回访问者屏幕的高度,以像素为单位,减去界面特性,比如窗口任务栏这些。
   <script>
document.write("可用高度: " + screen.availHeight);
</script>

JS Window Location对象

  • window.location 对象用于获得当前页面的地址URL,并把浏览器重定向到新的界面。编写时可不写window前缀。

  • location的一些实例

    • location.hostname 返回web主机的域名
    • location.pathname 返回当前页面的路径和文件名
    • location.port 返回web主机的端口(80或443)
    • location.protocol 返回所使用的web协议(http://或https://)

获取URL(href)

  • location.href 属性返回当前页面的url
<script>
//输出当前页面的URL
document.write(location.href);
</script>
//输出: http://www.runoob.com/js/js-window-location.html

获取URL路径名(pathname)

  • location.pathname 属性返回URL的路径名
<script>
document.write(location.pathname);
</script>
//输出: /js/js-window-location.html

加载新文档(网页)

  • location.assign() 方法加载新的文档
//加载一个新文档,即打开http://www.w3cschool.cc这个页面
  <html>
<head>
<script>
function newDoc()
 {
 window.location.assign("http://www.w3cschool.cc")
 }
</script>
</head>
<body>
<input type="button" value="Load new document" onclick="newDoc()">
</body>
</html>

JS 获取历史记录

  • window.history 对象包含浏览器的历史,编写时可以省略window前缀

后退网页

  • history.back() 加载历史记录的前一个URL,与浏览器点击后退按钮效果相同
   <html>
<head>
<script>
function goBack()
  {
  window.history.back()
  }
</script>
</head>
<body>
<input type="button" value="Back" onclick="goBack()">
</body>
</html>

前进网页

  • history forward() 方法加载历史列表的下一个URL,与在浏览器中点击前进按钮效果相同

        <html>
     <head>
     <script>
     function goForward()
       {
       window.history.forward()
       }
     </script>
     </head>
     <body>
     <input type="button" value="Forward" onclick="goForward()">
     </body>
     </html>
    

JS获取浏览器信息

  • window.navigator 对象包含有关访问者浏览器的信息,编写时可以省略window前缀
   <div id="example"></div> 
<script> 
txt = "<p>浏览器代号: " + navigator.appCodeName + "</p>"; 
txt+= "<p>浏览器名称: " + navigator.appName + "</p>"; 
txt+= "<p>浏览器版本: " + navigator.appVersion + "</p>"; 
txt+= "<p>启用Cookies: " + navigator.cookieEnabled + "</p>"; 
txt+= "<p>硬件平台: " + navigator.platform + "</p>"; 
txt+= "<p>用户代理: " + navigator.userAgent + "</p>"; 
txt+= "<p>用户代理语言: " + navigator.systemLanguage + "</p>"; 
document.getElementById("example").innerHTML=txt; 
</script> 
  • 需要注意的是,navigator对象的信息具有误导性,因为:

    • navigator数据可悲浏览器使用者更改
    • 一些浏览器对测试站点会识别错误
    • 浏览器无法报告晚于浏览器发布的新操作系统
  • 使用对象检测可以用来检测不同的浏览器

    • 例如,只有Opera支持属性window.opera,因此可以识别出Opera
           if(window.opera) {
            //此为Opera浏览器
           }

JS 弹窗

  • JS中可以创建三种消息框:警告框、确认框、提示框

警告框

  • 当警告框出现后,用户需要点击确定按钮才能继续进行操作
  • 语法:
   //这里也可以省略window前缀,直接使用alert()方法
   window.alert("sometext");
  • 实例
   <!DOCTYPE html>
<html>
<head>
<script>
function myFunction()
{
    alert("你好,我是一个警告框!");
}
</script>
</head>
<body>
<input type="button" onclick="myFunction()" value="显示警告框">
</body>
</html>

提示框

  • 出现提示框时,用户需要输入某个值,然后点击确定,返回值为输入的值,点击取消,返回值为null

  • 语法

window.prompt("sometext","defaultvalue");
  • 实例
   var person=prompt("请输入你的名字","Harry Potter");
if (person!=null && person!="")
{
    x="你好 " + person + "! 今天感觉如何?";
document.getElementById("demo").innerHTML=x;
}

确认框

  • 语法
   //这里的window可以省略
   window.confirm("sometext");
  • 实例
   var r=confirm("按下按钮");
if (r==true)
{
    x="你按下了\"确定\"按钮!";
}
else
{
    x="你按下了\"取消\"按钮!";
}

JS计时事件

  • setInterval() 间隔指定的毫秒数不停地执行指定的代码。
  • setTimeOut() 经过指定的毫秒数后执行指定的代码
  • 注: 这是HTML DOM Window对象的两个方法

setInterval()方法

  • 间隔指定的毫秒数不停地执行指定的代码
  • 语法
   window.setInterval("javascript function", milliseconds);
  • 实例1
   //每3秒弹出一个hello
   setInterval(function(){alert("Hello")},3000);
  • 实例2: 实时显示当前时间
   var myVar=setInterval(function(){myTimer()},1000);
function myTimer()
{
var d=new Date();
var t=d.toLocaleTimeString();
document.getElementById("demo").innerHTML=t;
}

clearInterval()方法

  • clearInterval()方法用来停止setInterval()方法执行的函数代码
  • 语法
   clearInterval(intervalVariable)
  • 实例
   <p id="demo"></p>
<button onclick="myStopFunction()">Stop time</button>
<script>
var myVar=setInterval(function(){myTimer()},1000);
function myTimer()
{
var d=new Date();
var t=d.toLocaleTimeString();
document.getElementById("demo").innerHTML=t;
}
function myStopFunction()
{
clearInterval(myVar);
}
</script>

setTimeout()方法

  • 经过多少时间后执行某个函数

  • 语法

   window.setTimeout("javascript 函数",毫秒数);
  • 实例
   //等待3秒,弹出hello
   setTimeout(function(){alert("hello")},3000);

clearTimeout()

  • 用于停止执行setTimeout()方法的函数代码,如果函数未执行

  • 语法

   clear.Timeout(timeoutVariable)
  • 实例
   var myVar;
function myFunction()
{
myVar=setTimeout(function(){alert("Hello")},3000);
}
function myStopFunction()
{
clearTimeout(myVar);
}

JS Cookie

  • Cookie用于存储web页面的用户信息

    • 当用户访问web页面时,他的名字可以记录在cookie中
    • 在用户下一次访问页面时,可以在cookie中读取用户访问记录。
  • cookie以建值对形式存在

   username = Lch
  • JS可以使用document.cookie属性来创建、读取、及删除cookie

使用JS创建cookie

  • 创建cookie
   document.cookie = "username=LCH"
  • 为cookie添加一个过期时间(以UTC或GMT时间),默认情况下,cookie在浏览器关闭时删除。
   document.cookie="username=LCH; expires=Thu,  18 Dec 2013 12:00:00 GMT"
  • 使用path参数告诉浏览器cookie的路径,默认情况下,cookie属于当前页面
   document.cookie="username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 GMT; path=/";
  • 实例: 设置cookie值的函数
   //cname: cookie的名称;cvalue: cookie的值;expires: cookie的过期时间
   function setCookie(cname, cvalue, exdays)
   {
    var d = new Date();
    d.setTime(d.getTime()+(exdays*24*60*60*1000));
    var expires = "expires="+d.toGMTString();
    document.cookie = cname + "=" + cvalue + "; " + expires;
   }

使用JS读取cookie

  • 在JS中可以使用以下代码来读取cookie
   var x = document.cookie;
  • 实例: 获取cookie值的函数
function getCookie(cname)
{
  var name = cname + "=";
  var ca = document.cookie.split(';');
  for(var i=0; i<ca.length; i++) 
  {
    var c = ca[i].trim();
    if (c.indexOf(name)==0) return c.substring(name.length,c.length);
  }
  return "";
}

使用JS修改cookie

  • 在JS中,修改cookie类似于创建cookie,修改之后旧的cookie将被覆盖
   document.cookie="username=John Smith; expires=Thu, 18 Dec 2013 12:00:00 GMT; path=/";

使用JS删除cookie

  • 删除cookie只需设置参数为以前的时间即可
   document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";

检测cookie值的函数

  • 以下是一个检测cookie是否创建的函数,如果设置cookie则显示问候信息,如果没有设置 cookie,将会显示一个弹窗用于询问访问者的名字,并调用 setCookie 函数将访问者的名字存储 365 天:
function checkCookie()
{
 var username=getCookie("username");
 if (username!="")
 {
   alert("Welcome again " + username);
 }
 else 
 {
   username = prompt("Please enter your name:","");
   if (username!="" && username!=null)
   {
     setCookie("username",username,365);
   }
 }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 1.js对象JavaScript中的所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript允许...
    廖马儿阅读 321评论 0 4
  • 本博客转自:「作者:若愚链接:https://zhuanlan.zhihu.com/p/22361337来源:知乎...
    韩宝亿阅读 2,744评论 0 3
  • 以下是常用的代码收集,学习用。转自豪情博客园 1. PC - js 返回指定范围的随机数(m-n之间)的公式 re...
    自由加咖啡阅读 989评论 0 1
  • 引子 稀缺让我们更有利,稀缺也让我们更无能,造成种种困境,让我们陷入贫穷和忙碌。那么我们又该如何主动地应对生活中的...
    daochun阅读 561评论 11 13
  • 陇首空阔,烟水苍茫,西楼临高望远。 芳草凄凄,败叶萧萧,天际云飞黛浅。 白驹过隙,星星发,暗里霜染。 谁伴。奈空识...
    伊清欢阅读 594评论 11 14