所谓的BOM即浏览器对象模型(Browser Object Model)。BOM赋予了JS操作浏览器的能力,即window操作。DOM则用于创建删除节点,操作HTML文档。BOM尚无正式的标准,导致各浏览器对于BOM方法的支持各有不同,因此需要具体问题具体对待。
2、window对象。
window对象是BOM的核心,window对象指当前的浏览器窗口。所有JS全局对象、函数以及变量都属于window对象。全局变量是window对象的属性。全局函数是window对象的方法。甚至DOM的document也属于window对象的属性之一,只是大多数情况下可以忽略不写。
window对象方法:
3、窗口操作。
(1)、打开窗口。
open() 方法可用于打开新窗口。
语法:window.open(url, name/target, 窗口设置, replace)
该方法的三个参数都是可选的,默认在新页面打开一个空白页。第一个参数可设置要打开窗口的路径。第二个参数规定在何处打开新窗口,也可用于指定窗口的名称。第三个参数设置窗口参数,多个参数可用逗号分隔。如果有第一个参数,后面两个参数可省略,则在新页面打开。第二个参数一般无需设置,如果要规定窗口的参数,则必须有第二个参数,必须为'_blank',或者用'',代替,并且距离屏幕顶部不能为0,否则失效,如果设置了左边距离,顶部可设置为0。最后一个参数规定加载到窗口的URL是在窗口的浏览历史中创建一个条目,还是替换浏览器历史中的当前条目,值为true或false, 值为true时URL替换浏览历史中的当前条目,为false时URL在浏览历史中创建新的条目。
下表是一些常用的窗口设置参数:
实例:点击按钮,在新窗口打开百度首页,宽600,高400,距屏顶0像素,屏左10像素。
<body> <input type="button" value="点击我,打开新窗口!"> <script> function newWin(){ window.open('http://www.baidu.com', '_blank', 'width=,height=,top=,left='); } </script> </body>
该实例在IE下并不会打开一个自定义的窗口,而是新打开一个标签页。
如果在脚本中直接打开新窗口,在Chrome和FF下会被当作广告弹窗直接拦截,但是在IE下可以正常显示。360浏览器的极速模式使用的是Chrome的内核,兼容模式则使用的IE内核,360浏览器使用人群相对较多,这里就不描述了,只要其余浏览器正常运行,他就没什么问题。
<script> window.open(); window.open('http://baidu.com'); </script>
实例:获得焦点和失去焦点
<body> <input type="button" value="获得焦点"> <script> //确保新的窗口获得焦点: function openWin(){ var oGet=window.open('', '', 'width=,height='); oGet.document.write('<p>我是新打开的窗口</p>'); oGet.focus(); } </script> <input type="button" value="失去焦点"> <script> //确保新的窗口没有获得焦点: function newWin(){ var lose=window.open('', '', 'width=,height='); lose.document.write('<p>我是新打开的窗口</p>'); lose.blur(); } </script> </body>
实例:返回新打开窗口的名称
<body> <input type="button" value="打开"> <script> function openWin(){ var newWin=window.open('', 'newWindow', 'width=,height='); newWin.document.write('<p>新窗口名称:'+ newWin.name + '</p>'); } </script> </body>
实例:打开新窗口向父窗口传递信息
<body> <input type="button" value="打开"> <script> function openWin(){ var newWin=window.open('', '', 'width=,height='); newWin.document.write("<p>关闭我之后会向父窗口输入文本信息</p>"); newWin.focus(); newWin.opener.document.write('<p>我是父窗口,加载完成后,向我输出内容会覆盖我所有内容</p>'); } </script> </body>
实例:指定窗口大小、移动窗口和滚动内容
<!DOCTYPE html> <html> <head> <meta charset="UTF-"> <title>JavaScript实例</title> </head> <body> <br><br> <h>用指定像素调整窗口大小:</h> <input type="button" value="打开"><br><br> <input type="button" value="调整"> <script> var w; function openWin(){ w=window.open('', '', 'width=,height=,top='); w.focus(); } function byWin(){ //如果不使用框架,可使用window代替top w.top.resizeBy(,); w.focus(); } </script> <h>将窗口的大小调整到指定的宽度和高度:</h> <input type="button" value="打开"><br><br> <input type="button" value="调整"> <script> var w; function newWin(){ w=window.open('', '', 'width=,height='); w.focus(); } function toWin(){ w.resizeTo(,); w.focus(); } </script> <h>相对于当前位置移动新窗口:</h> <input type="button" value="打开"><br><br> <input type="button" value="多移动几下"> <script> var w; function oWin(){ w=window.open('', '', 'width=,height='); } function moveWin(){ w.moveBy(,); w.focus(); } </script> <h>移动新窗口到指定位置:</h> <input type="button" value="打开"><br><br> <input type="button" value="移动"> <script> var w; function nWin(){ w=window.open('', '', 'width=,height='); } function moveToWin(){ w.moveTo(,); w.focus(); } </script> <h>由指定的像素数滚动内容:</h> <input type="button" value="由指定的像素数滚动内容"> <script> function scrollWin(){ window.scrollBy(,); } </script> <h>滚动到指定内容处:</h> <input type="button" value="滚动到指定内容处"> <script> function scrollWindow(){ window.scrollTo(,); } </script> <br><br><br><br><br><br> </body> </html>
方法解析:
resizeBy(w, h):根据指定的像素来调整窗口的大小。该方法定义指定窗口的右下角移动的像素,左上角将不会被移动(它停留在其原来的坐标)。