一.JavaScript Window
JavaScript Window - 浏览器对象模型
浏览器对象模型 (BOM) 使 JavaScript 有能力与浏览器"对话"。
Window 对象是BOM中所有对象的核心,除了是BOM中所有对象的父对象外,还包含一些窗口控制函数。
1.浏览器对象模型 (BOM)
浏览器对象模型(Browser Object Model (BOM))尚无正式标准。
由于现代浏览器已经(几乎)实现了 JavaScript 交互性方面的相同方法和属性,因此常被认为是 BOM 的方法和属性。
2.Window 对象
所有浏览器都支持 window 对象。它表示浏览器窗口。
所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。
全局变量是 window 对象的属性。
全局函数是 window 对象的方法。
甚至 HTML DOM 的 document 也是 window 对象的属性之一:
window.document.getElementById("header");
3.Window 子对象
Window的子对象主要有如下几个:
- JavaScript document 对象
- JavaScript frames 对象
- JavaScript history 对象
- JavaScript location 对象
- JavaScript navigator 对象
- JavaScript screen 对象
4.Window 尺寸
有三种方法能够确定浏览器窗口的尺寸(浏览器的窗口,不包括工具栏和滚动条)。
对于Internet Explorer、Chrome、Firefox、Opera 以及 Safari:
- window.innerHeight - 浏览器窗口的内部高度
- window.innerWidth - 浏览器窗口的内部宽度
对于 Internet Explorer 8、7、6、5:
- document.documentElement.clientHeight
- document.documentElement.clientWidth
或者
- document.body.clientHeight
- document.body.clientWidth
实用的 JavaScript 方案(涵盖所有浏览器):
var w=window.innerWidth|| document.documentElement.clientWidth|| document.body.clientWidth;var h=window.innerHeight|| document.documentElement.clientHeight|| document.body.clientHeight;
5.Window 对象属性
属性 | 描述 |
---|---|
返回窗口是否已被关闭。 | |
设置或返回窗口状态栏中的默认文本。 | |
对 Document 对象的只读引用。(请参阅) | |
返回窗口中所有命名的框架。该集合是 Window 对象的数组,每个 Window 对象在窗口中含有一个框架。 | |
对 History 对象的只读引用。请参数 。 | |
返回窗口的文档显示区的高度。 | |
返回窗口的文档显示区的宽度。 | |
设置或返回窗口中的框架数量。 | |
用于窗口或框架的 Location 对象。请参阅 。 | |
设置或返回窗口的名称。 | |
对 Navigator 对象的只读引用。请参数 。 | |
返回对创建此窗口的窗口的引用。 | |
返回窗口的外部高度,包含工具条与滚动条。 | |
返回窗口的外部宽度,包含工具条与滚动条。 | |
设置或返回当前页面相对于窗口显示区左上角的 X 位置。 | |
设置或返回当前页面相对于窗口显示区左上角的 Y 位置。 | |
返回父窗口。 | |
对 Screen 对象的只读引用。请参数 。 | |
返回相对于屏幕窗口的x坐标 | |
返回相对于屏幕窗口的y坐标 | |
返回相对于屏幕窗口的x坐标 | |
返回相对于屏幕窗口的y坐标 | |
返回对当前窗口的引用。等价于 Window 属性。 | |
设置窗口状态栏的文本。 | |
返回最顶层的父窗口。 |
6.Window 对象方法
方法 | 描述 |
---|---|
显示带有一段消息和一个确认按钮的警告框。 | |
把键盘焦点从顶层窗口移开。 | |
取消由 setInterval() 设置的 timeout。 | |
取消由 setTimeout() 方法设置的 timeout。 | |
关闭浏览器窗口。 | |
显示带有一段消息以及确认按钮和取消按钮的对话框。 | |
创建一个 pop-up 窗口。 | |
把键盘焦点给予一个窗口。 | |
可相对窗口的当前坐标把它移动指定的像素。 | |
把窗口的左上角移动到一个指定的坐标。 | |
打开一个新的浏览器窗口或查找一个已命名的窗口。 | |
打印当前窗口的内容。 | |
显示可提示用户输入的对话框。 | |
按照指定的像素调整窗口的大小。 | |
把窗口的大小调整到指定的宽度和高度。 | |
scroll() | |
按照指定的像素值来滚动内容。 | |
把内容滚动到指定的坐标。 | |
按照指定的周期(以毫秒计)来调用函数或计算表达式。 | |
在指定的毫秒数后调用函数或计算表达式。 |
二.JavaScript Window Screen
window.screen 对象包含有关用户屏幕的信息。
这些信息可以用来了解客户端硬件的基本配置。
1.Window Screen
window.screen对象在编写时可以不使用 window 这个前缀。
一些属性:
-
screen.availWidth - 可用的屏幕宽度
-
screen.availHeight - 可用的屏幕高度
2.Window Screen 可用宽度
screen.availWidth 属性返回访问者屏幕的宽度,以像素计,减去界面特性,比如窗口任务栏。
//返回您的屏幕的可用宽度://以上代码输出为:可用宽度: 1920
3.Window Screen 可用高度
screen.availHeight 属性返回访问者屏幕的高度,以像素计,减去界面特性,比如窗口任务栏。
4.Screen 对象属性
属性 | 说明 |
---|---|
返回屏幕的高度(不包括Windows任务栏) | |
返回屏幕的宽度(不包括Windows任务栏) | |
返回目标设备或缓冲器上的调色板的比特深度 | |
返回屏幕的总高度 | |
返回屏幕的颜色分辨率(每象素的位数) | |
返回屏幕的总宽度 |
三.JavaScript Window Location
window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。
这种方法既可以用于具有onclick事件的标签,也可以用于满足某些条件进行跳转,特点是方便且灵活。
1.Window Location
window.location 对象在编写时可不使用 window 这个前缀。 一些例子:
一些实例:
-
返回 web 主机的域名
-
返回当前页面的路径和文件名
-
返回 web 主机的端口 (80 或 443)
-
返回所使用的 web 协议(http:// 或 https://)
2.Window Location Href
location.href 属性返回当前页面的 URL。
以上代码输出为://www.w3cschool.cn/javascript/js-window-location.html
3.Window Location Pathname
location.pathname 属性返回 URL 的路径名。
//返回当前 URL 的路径名://以上代码输出为:/javascript/js-window-location.html
4.Window Location Assign
location.assign() 方法加载新的文档。
加载一个新的文档:
5.javascript重定向跳转
页面重定向是什么?
当你点击一个URL来访问一个网页X,但在内部你被定向到另一页Y,仅仅是因为页面重定向。这一概念是从不同于JavaScript 页面刷新 。
可能有各种原因,为什么想从原来的页面重定向。下面列出的几个原因:如果不喜欢你的域名,可以重定向到一个新的。同时,要引导所有访问者到新网站。在这种情况下,可以保持旧的域名,但放在一个页面到一个页面重定向使所有的旧域名游客可以来到新的域名。
基于浏览器的版本,或者名字不同的页面,也可以根据不同的国家,而不是用服务器端网页重定向,可以使用客户端页面重定向到登陆用户在相应的页面。
搜索引擎可能已经收录新页面。不过,在移动到另一个域名,那么不喜欢失去访客通过搜索引擎来了。所以,可以使用客户端页面的重定向。但请记住,这不应该做的,使搜索引擎傻瓜,否则,这可能让网站被取缔。
页面重新方向如何工作 ?
示例1:
这使用JavaScript在客户端页面的重定向是非常简单的。网站访问者重定向到一个新的页面,只需要添加在head部分加入一行如下:示例 2:可以将其重定向到一个新的页面之前显示相应的信息给网站访客。这将需要一个位时间延迟加载新页。以下是简单的例子来实现相同的:
这里的 setTimeout()是一个内置的JavaScript函数,可用于给定的时间间隔之后执行另一个函数。 示例3:以下是例子重定向基于其浏览器不同的网页访问者:
常用javascript重定向跳转方法
//第一种:代码如下: //第二种: 代码如下: //第三种: 代码如下: //第四种: 代码如下: //第五种: 代码如下:
四.JavaScript Window History
JavaScript Window History
window.history 对象包含浏览器的历史。
Window History
window.history对象在编写时可不使用 window 这个前缀。
为了保护用户隐私,对 JavaScript 访问该对象的方法做出了限制。
一些方法:
- - 与在浏览器点击后退按钮相同
- - 与在浏览器中点击向前按钮向前相同
1.Window History Back
history.back() 方法加载历史列表中的前一个 URL。
这与在浏览器中点击后退按钮是相同的:
2.Window History Forward
history forward() 方法加载历史列表中的下一个 URL。
这与在浏览器中点击前进按钮是相同的:
3.go(n)概述
浏览器窗口有一个
history
对象,用来保存浏览历史。如果当前窗口先后访问了三个网址,那么
history
对象就包括三项,history.length
属性等于3go()
:接受一个整数作为参数,移动到该整数指定的页面,比如go(1)
相当于forward()
,go(-1)
相当于back(),
history.go(0)
相当于刷新当前页面。如果移动的位置超出了访问历史的边界,以上三个方法并不报错,而是默默的失败。
4.history.pushState()
HTML5为
history
对象添加了两个新方法,history.pushState()
和history.replaceState()
,用来在浏览历史中添加和修改记录。if (!!(window.history && history.pushState)){ // 支持History API} else { // 不支持}
上面代码可以用来检查,当前浏览器是否支持History API。如果不支持的话,可以考虑使用Polyfill库。
history.pushState
方法接受三个参数,依次为:state
:一个与指定网址相关的状态对象,popstate
事件触发时,该对象会传入回调函数。如果不需要这个对象,此处可以填null
。title
:新页面的标题,但是所有浏览器目前都忽略这个值,因此这里可以填null
。url
:新的网址,必须与当前页面处在同一个域。浏览器的地址栏将显示这个网址。
假定当前网址是
example.com/1.html
,我们使用pushState
方法在浏览记录(history
对象)中添加一个新记录。var stateObj = { foo: 'bar' };history.pushState(stateObj, 'page 2', '2.html');
添加上面这个新记录后,浏览器地址栏立刻显示
example.com/2.html
,但并不会跳转到2.html
,甚至也不会检查2.html
是否存在,它只是成为浏览历史中的最新记录。这时,你在地址栏输入一个新的地址(比如访问google.com
),然后点击了倒退按钮,页面的 URL 将显示2.html
;你再点击一次倒退按钮,URL 将显示1.html
。总之,
pushState
方法不会触发页面刷新,只是导致history
对象发生变化,地址栏会有反应。如果
pushState
的url参数,设置了一个新的锚点值(即hash
),并不会触发hashchange
事件。如果设置了一个跨域网址,则会报错。// 报错history.pushState(null, null, 'https://twitter.com/hello');
5.history.replaceState()
history.replaceState
方法的参数与pushState
方法一模一样,区别是它修改浏览历史中当前纪录。假定当前网页是
example.com/example.html
。history.pushState({page: 1}, 'title 1', '?page=1');history.pushState({page: 2}, 'title 2', '?page=2');history.replaceState({page: 3}, 'title 3', '?page=3');history.back()// url显示为http://example.com/example.html?page=1history.back()// url显示为http://example.com/example.htmlhistory.go(2)// url显示为http://example.com/example.html?page=3
6.history.state属性
history.state
属性返回当前页面的state
对象。history.pushState({page: 1}, 'title 1', '?page=1');history.state// { page: 1 }
popstate事件
每当同一个文档的浏览历史(即
history
对象)出现变化时,就会触发popstate
事件。需要注意的是,仅仅调用
pushState
方法或replaceState
方法 ,并不会触发该事件,只有用户点击浏览器倒退按钮和前进按钮,或者使用JavaScript调用back
、forward
、go
方法时才会触发。另外,该事件只针对同一个文档,如果浏览历史的切换,导致加载不同的文档,该事件也不会触发。使用的时候,可以为
popstate
事件指定回调函数。这个回调函数的参数是一个event
事件对象,它的state
属性指向pushState
和replaceState
方法为当前URL所提供的状态对象(即这两个方法的第一个参数)。window.onpopstate = function (event) { console.log('location: ' + document.location); console.log('state: ' + JSON.stringify(event.state));};// 或者window.addEventListener('popstate', function(event) { console.log('location: ' + document.location); console.log('state: ' + JSON.stringify(event.state));});
上面代码中的
event.state
,就是通过pushState
和replaceState
方法,为当前URL绑定的state
对象。这个
state
对象也可以直接通过history
对象读取。var currentState = history.state;
注意,页面第一次加载的时候,在
load
事件发生后,Chrome和Safari浏览器(Webkit核心)会触发popstate
事件,而Firefox和IE浏览器不会。7.URLSearchParams API
URLSearchParams API用于处理URL之中的查询字符串,即问号之后的部分。没有部署这个API的浏览器,可以用这个垫片库。
var paramsString = 'q=URLUtils.searchParams&topic=api';var searchParams = new URLSearchParams(paramsString);
URLSearchParams有以下方法,用来操作某个参数。
has()
:返回一个布尔值,表示是否具有某个参数get()
:返回指定参数的第一个值getAll()
:返回一个数组,成员是指定参数的所有值set()
:设置指定参数delete()
:删除指定参数append()
:在查询字符串之中,追加一个键值对toString()
:返回整个查询字符串var paramsString = 'q=URLUtils.searchParams&topic=api';var searchParams = new URLSearchParams(paramsString);searchParams.has('topic') // truesearchParams.get('topic') // "api"searchParams.getAll('topic') // ["api"]searchParams.get('foo') // null,注意Firefox返回空字符串searchParams.set('foo', 2);searchParams.get('foo') // 2searchParams.append('topic', 'webdev');searchParams.toString() // "q=URLUtils.searchParams&topic=api&foo=2&topic=webdev"searchParams.append('foo', 3);searchParams.getAll('foo') // [2, 3]searchParams.delete('topic');searchParams.toString() // "q=URLUtils.searchParams&foo=2&foo=3"
URLSearchParams还有三个方法,用来遍历所有参数。
keys()
:遍历所有参数名values()
:遍历所有参数值entries()
:遍历所有参数的键值对
上面三个方法返回的都是
Iterator
对象。var searchParams = new URLSearchParams('key1=value1&key2=value2');for (var key of searchParams.keys()) { console.log(key);}// key1// key2for (var value of searchParams.values()) { console.log(value);}// value1// value2for (var pair of searchParams.entries()) { console.log(pair[0]+ ', '+ pair[1]);}// key1, value1// key2, value2
在Chrome浏览器之中,
URLSearchParams
实例本身就是Iterator
对象,与entries
方法返回值相同。所以,可以写成下面的样子。for (var p of searchParams) { console.log(p); }
下面是一个替换当前URL的例子。
// URL: https://example.com?version=1.0var params = new URLSearchParams(location.search.slice(1));params.set('version', 2.0);window.history.replaceState({}, '', `${location.pathname}?${params}`);// URL: https://example.com?version=2.0
URLSearchParams
实例可以当作POST数据发送,所有数据都会URL编码。let params = new URLSearchParams();params.append('api_key', '1234567890');fetch('https://example.com/api', { method: 'POST', body: params}).then(...)
//DOM的a元素节点的searchParams属性,就是一个URLSearchParams实例。var a = document.createElement('a');a.href = 'https://example.com?filter=api';a.searchParams.get('filter') // "api" //URLSearchParams还可以与URL接口结合使用。var url = new URL(location);var foo = url.searchParams.get('foo') || 'somedefault';
五.JavaScript Window Navigator
-
window.navigator 对象包含有关访问者浏览器的信息。
Window Navigator
window.navigator 对象在编写时可不使用 window 这个前缀。
警告!!!
来自 navigator 对象的信息具有误导性,不应该被用于检测浏览器版本,这是因为:
- navigator 数据可被浏览器使用者更改
- 一些浏览器对测试站点会识别错误
- 浏览器无法报告晚于浏览器发布的新操作系统
浏览器检测
由于 navigator 可误导浏览器检测,使用对象检测可用来嗅探不同的浏览器。
由于不同的浏览器支持不同的对象,您可以使用对象来检测浏览器。例如,由于只有 Opera 支持属性 "window.opera",您可以据此识别出 Opera。
例子:if (window.opera) {...some action...}
相关阅读
请查看我们的 ,其中提供了Navigator对象的所有的属性和方法。
这个手册包含的关于每个属性和方法的用法的详细描述和实例。
-
JavaScript 弹窗
可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框。
1.警告框
警告框经常用于确保用户可以得到某些信息。
当警告框出现后,用户需要点击确定按钮才能继续进行操作。
window.alert("sometext");
window.alert() 方法可以不带上window对象,直接使用alert()方法。
2.确认框
确认框通常用于验证是否接受用户操作。
当确认卡弹出时,用户可以点击 "确认" 或者 "取消" 来确定用户操作。
当你点击 "确认", 确认框返回 true, 如果点击 "取消", 确认框返回 false。
window.confirm("sometext");
window.confirm() 方法可以不带上window对象,直接使用confirm()方法。
3.提示框
提示框经常用于提示用户在进入页面前输入某个值。
当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。
如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。
window.prompt("sometext","defaultvalue");
window.prompt() 方法可以不带上window对象,直接使用prompt()方法。
4.换行
弹窗使用 反斜杠 + "n"(\n) 来设置换行。
alert("Hello\nHow are you?");
七.JavaScript 计时事件
通过使用 JavaScript,我们有能力做到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。
在 JavaScritp 中使用计时事件是很容易的,两个关键方法是:
- - 间隔指定的毫秒数不停地执行指定的代码。
- - 暂停指定的毫秒数后执行指定的代码
Note: setInterval() 和 setTimeout() 是 HTML DOM Window对象的两个方法。
setInterval() 方法setInterval() 间隔指定的毫秒数不停地执行指定的代码
window.setInterval("javascript function",milliseconds);
window.setInterval() 方法可以不使用window前缀,直接使用函数setInterval()。
setInterval() 第一个参数是函数(function)。
第二个参数间隔的毫秒数
注意: 1000 毫秒是一秒。
//每三秒弹出 "hello" :setInterval(function(){alert("Hello")},3000);
实例展示了如何使用 setInterval() 方法,但是每三秒弹出一次对用户体验并不好。
以下实例将显示当前时间。 setInterval() 方法设置每秒钟执行一次代码,就是和手表一样。
var myVar=setInterval(function(){myTimer()},1000); function myTimer() { var d=new Date(); var t=d.toLocaleTimeString(); document.getElementById("demo").innerHTML=t; }
如何停止执行?
clearInterval() 方法用于停止 setInterval() 方法执行的函数代码。
window.clearInterval(intervalVariable)
window.clearInterval() 方法可以不使用window前缀,直接使用函数clearInterval()。
要使用 clearInterval() 方法, 在创建计时方法时你必须使用全局变量:
setTimeout() 方法
window.setTimeout("javascript 函数",毫秒数);
setTimeout() 方法会返回某个值。在上面的语句中,值被储存在名为 t 的变量中。假如你希望取消这个 setTimeout(),你可以使用这个变量名来指定它。
setTimeout() 的第一个参数是含有 JavaScript 语句的字符串。这个语句可能诸如 "alert('5 seconds!')",或者对函数的调用,诸如"alertMsg()"。
第二个参数指示从当前起多少毫秒后执行第一个参数。
提示:1000 毫秒等于一秒。
//等待3秒,然后弹出 "Hello":setTimeout(function(){alert("Hello")},3000);
如何停止执行?
clearTimeout() 方法用于停止执行setTimeout()方法的函数代码。
语法
window.clearTimeout(timeoutVariable)
window.clearTimeout() 方法可以不使用window 前缀。
要使用clearTimeout() 方法, 你必须在创建超时方法中(setTimeout)使用全局变量:
myVar=setTimeout("javascript function",milliseconds);
如果函数还未被执行,你可以使用 clearTimeout() 方法来停止执行函数代码。
//以下是同一个实例, 但是添加了 "Stop the alert" 按钮:var myVar; function myFunction() { myVar=setTimeout(function(){alert("Hello")},3000); } function myStopFunction() { clearTimeout(myVar); }
八.JavaScript Cookies
Cookies 用于存储 web 页面的用户信息。
由于 JavaScript 是运行在客户端的脚本,所以可以使用JavaScript来设置运行在客户端的Cookies。
什么是 Cookies?
Cookies 是一些数据, 存储于你电脑上的文本文件中。
当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。
Cookies 的作用就是用于解决 "如何记录客户端的用户信息":
- 当用户访问 web 页面时,他的名字可以记录在 cookie 中。
- 在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。
Cookies 以名/值对形式存储,如下所示:
username=John Doe
当浏览器从服务器上请求 web 页面时, 属于该页面的 cookies 会被添加到该请求中。服务端通过这种方式来获取用户的信息。
使用 JavaScript 创建Cookie
JavaScript 可以使用 document.cookie 属性来创建 、读取、及删除 cookies。
JavaScript 中,创建 cookie 如下所示:
document.cookie="username=John Doe";
您还可以为 cookie 添加一个过期时间(以 UTC 或 GMT 时间)。默认情况下,cookie 在浏览器关闭时删除:
document.cookie="username=John Doe; 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=/";
使用 JavaScript 读取 Cookie
在 JavaScript 中, 可以使用以下代码来读取 cookies:
var x = document.cookie;
document.cookie 将以字符串的方式返回所有的 cookies,类型格式: cookie1=value; cookie2=value; cookie3=value
使用 JavaScript 修改 Cookie
在 JavaScript 中,修改 cookies 类似于创建 cookies,如下所示:
document.cookie="username=John Smith; expires=Thu, 18 Dec 2013 12:00:00 GMT; path=/";
旧的 cookie 将被覆盖。
使用 JavaScript 删除 Cookie
删除 cookie 非常简单。您只需要设置 expires 参数为以前的时间即可,如下所示,设置为 Thu, 01 Jan 1970 00:00:00 GMT:
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
注意,当您删除时不必指定 cookie 的值。
Cookie 字符串
document.cookie 属性看起来像一个普通的文本字符串,其实它不是。
即使您在 document.cookie 中写入一个完整的 cookie 字符串, 当您重新读取该 cookie 信息时,cookie 信息是以名/值对的形式展示的。
如果您设置了新的 cookie,旧的 cookie 不会被覆盖。 新 cookie 将添加到 document.cookie 中,所以如果您重新读取document.cookie,您将获得如下所示的数据:
cookie1=value; cookie2=value;
显示所有 Cookie 创建 Cookie 1 创建 Cookie 2 删除 Cookie 1 删除 Cookie 2
如果您需要查找一个指定 cookie 值,您必须创建一个JavaScript 函数在 cookie 字符串中查找 cookie 值。
JavaScript Cookie 实例
在以下实例中,我们将创建 cookie 来存储访问者名称。
首先,访问者访问 web 页面, 他将被要求填写自己的名字。该名字会存储在 cookie 中。
访问者下一次访问页面时,他会看到一个欢迎的消息。
在这个实例中我们会创建 3 个 JavaScript 函数:
- 设置 cookie 值的函数
- 获取 cookie 值的函数
- 检测 cookie 值的函数