BOM(Browser Object Model)

什么是BOM

  • BOM是browser object model的缩写,简称浏览器对象模型
  • BOM提供了独立于内容而与浏览器窗口进行交互的对象
  • 由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window
  • BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性
  • BOM缺乏标准,JavaScript语法的标准化组织是ECMA,DOM的标准化组织是W3C
  • BOM最初是Netscape浏览器标准的一部分
TIM截图20170424125747.png

可以看到图中并没有叫BOM的 , 搜索中出现的第一个链接是Window MDN .
因为BOM并没有 specification

  • BOM属于约定俗成 , 比如 Firefox 怎么实现 , chrome就照抄一下 , 包括一些其他的浏览器 . 所以会有一些独立的API,并不互相支持

大部分的通用API

  • window.history
    这个API控制前进返回,按钮


    TIM截图20170424125747.png

    后退就是 , window.history.back()
    前进就是 , window.history.forward()
    window.history.go(-1) //等价于back()
    window.history.go(1) //等价于forward()

.

window.innerHeight

获取浏览窗口的高度

.

window.location

用于操作地址栏
window.location.href = 'https://www.baidu.com' //操作跳转到百度
也可以使用这种写法window.location

  • window.location.protocol 获取当前协议
    "https:"
  • window.location.hostname 获取域名
    "www.jianshu.com"
  • window.location.port 获取端口号
    "" //没有就显示空字符串
  • window.location.host 获取域名和端口号
    "www.jianshu.com" 没有端口号就不显示
  • window.location.pathname 获取路径
    "/writer" 它不包含查询字符串
  • window.location.search 获取查询字符串
    "" 没有就显示空字符串
  • window.location.hash 获取#后面的内容 ,fragment
    "" 没有显示空字符串 ,
  • window.location.origin 获取网站的起源, 协议+域名+端口号
    "http://www.jianshu.com"

window.name

获取窗口的名字, 可以修改

window.navigator

获取 浏览器 的所有信息

window.outerHeight

获取整个浏览器的高度

window.pageXOffset

等同于window.scrollX

window.pageYOffset

等同于window.scrollY

window.parent

返回当前窗口的父窗口对象.
如果一个窗口没有父窗口,则它的 parent 属性为自身的引用.
如果当前窗口是一个 <iframe>, <object>, 或者 <frame>,则它的父窗口是嵌入它的那个窗口

window.screen

屏幕相关的信息

  • window.screen.availHeight
    返回浏览器窗口在屏幕上可占用的垂直空间,即最大高度。
  • window.screen.availWidth
    同理 , 这是宽度
  • window.screen.height //屏幕的高度
  • window.screen.width //屏幕的宽度

window.self

window.self === window
self(自己) 如名字一样就是它自己
你很可能覆盖全局变量

window.top

返回最顶层的祖先窗口

window打开新窗口

在页面正中央打开一个制定宽高的window

window.$ = function(){    //声明一个全局变量$ , 这个函数就是对象 , 这个函数和下面的bom属性没关系
        let array = []  
        return array          
    }

$.bom = {                //给$绑定一个属性bom , bom是个对象
      openAtCenter: function(width,height,url){    //bom对象里有一个函数叫做,openAtCenter
      window.open(url,'_blank',`width=${width}px,height=${height}px, 
        screenX=${screen.width/2 - width/2}px,screenY=${screen.height/2 - width/2}`)
        //宽高等于你传的参数 , screenX的位置是屏幕宽度的一半减去宽的一半,screenY是屏幕高度的一半,减去高度的一半
      }
}

这个$的bom属性 , 之所以不写在$函数的里面 , 它会重复执行 要避免这种情况
这时候你可以设置iframe,使用下面的代码

window.opener.location.reload()  //设置弹出的子窗口刷新父窗口
window.close()  //关闭自己

以上就是常见的弹出窗口登录和关闭

修改查询参数 location.search

window.$ = function(){
  let array = []
  return array
}

$.bom = {
  openAtCenter: function(width, height, url){
    window.open(url, '_blank', `
      width=${width}px,height=${height}px,
      screenX=${screen.width/2 - width/2}px,
      screenY=${screen.height/2 - height/2}px
    `)
  },

  search: function(name, value){
    let searchAll = function(){
      let result = {}
      let search = window.location.search
      if(search[0] === '?'){
        search = search.slice(1)
      }
      let searchArray = search.split('&')
      for(var i =0;i<searchArray.length; i++){
        let parts = searchArray[i].split('=')
        result[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1] || '')
      }
      return result
    }
    let result = searchAll()
    if(value === undefined){
      return result[name]
    }else{
      if(result[name] === undefined){
        location.search += `&${encodeURIComponent(name)}=${encodeURIComponent(value)}`
      }else{
        result[name] = encodeURIComponent(value)
        let newSearch = '?'
        for(let key in result){
          newSearch += `${encodeURIComponent(key)}=${encodeURIComponent(result[key])}&`
        }
        location.search = newSearch
      }
    }
  }
}  

encodeURIComponent() & decodeURIComponent()

encodeURIComponent()是对统一资源标识符(URI)的组成部分进行编码的方法。它使用一到四个转义序列来表示字符串中的每个字符的UTF-8编码(只有由两个Unicode代理区字符组成的字符才用四个转义字符编码)。

TIM截图20170426130453.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容

  • BOM 概述 1. BOM(浏览器模型) Browser Object Moder浏览器对象模型 什么是BOM ?...
    谢聃阅读 438评论 1 1
  • 第8章 BOM 本章内容主要是 理解window对象 控制窗口、框架和弹出窗口 利用location对象中的页面信...
    丨ouo丨阅读 503评论 0 1
  • ECMAScript 是 JavaScript 的核心,但如果要在 Web 中使用 JavaScript,那么 B...
    劼哥stone阅读 765评论 2 5
  • 一. BOM常用的API: BOM:浏览器对象模型, 是操作浏览器的API window.console返回con...
    晓风残月1994阅读 343评论 0 0
  • 第一道:洋葱炒嫩牛肉(oignon avec veau) 嫩滑牛肉的诀窍在于:横切,锁水,快炒。 主料: 牛肉,洋...
    Motif阅读 670评论 0 1