什么是 Web API?
API 指的是应用程序编程接口(Application Programming Interface)。
Web API 是 Web 的应用程序编程接口。
浏览器 API 可以扩展 Web 浏览器的功能。
服务器 API 可以扩展 Web 服务器的功能。
JavaScript 验证 API
约束验证 DOM 方法
| 属性 | 描述 |
|---|---|
| checkValidity() | 如果 input 元素包含有效数据,则返回 true。 |
| setCustomValidity() | 设置 input 元素的 validationMessage 属性。 |
使用
<body>
<input id="input" type="number" min="100" max="300" required>
<button onclick="testFunc()">快点我</button>
<p id="test_p"></p>
<script>
function testFunc(){
const input = document.getElementById("input")
if (!input.checkValidity()){
document.getElementById("test_p").innerHTML = input.validationMessage;
}else{
document.getElementById("test_p").innerHTML = input.value;
}
}
</script>
</body>
约束验证 DOM 属性
| 属性 | 描述 |
|---|---|
| validity | 包含与输入元素有效性相关的布尔属性。 |
| validationMessage | 包含当有效性为 false 时浏览器将显示的消息。 |
| willValidate | 指示是否将验证 input 元素。 |
有效性属性
input 元素的有效性属性包含许多与数据有效性相关的属性:
| 属性 | 描述 |
|---|---|
| customError | 如果设置了自定义有效性消息,则设置为 true。 |
| patternMismatch | 如果元素的值与其 pattern 属性不匹配,则设置为 true。 |
| rangeOverflow | 如果元素的值大于其 max 属性,则设置为 true。 |
| rangeUnderflow | 如果元素的值小于其 min 属性,则设置为 true。 |
| stepMismatch | 如果元素的值对其 step 属性无效,则设置为 true。 |
| tooLong | 如果元素的值超过其 maxLength 属性,则设置为 true。 |
| typeMismatch | 如果元素的值对其 type 属性无效,则设置为 true。 |
| valueMissing | 如果元素(具有 required 属性)没有值,则设置为 true。 |
| valid | 如果元素的值有效,则设置为 true |
如果输入字段中的数字大于 100(input 元素的 max 属性),则显示一条消息:
例子-rangeOverflow 属性
<input id="id1" type="number" max="100">
<button onclick="myFunction()">OK</button>
<p id="demo"></p>
<script>
function myFunction() {
let text = "Value OK";
if (document.getElementById("id1").validity.rangeOverflow) {
text = "Value too large";
}
}
</script>
Web History API
History 对象属性
| 属性 | 描述 |
|---|---|
| length | 返回历史列表中的 URL 数量。 |
History 对象方法
| 方法 | 描述 |
|---|---|
| back() | 加载历史列表中的上一个 URL。 |
| forward() | 加载历史列表中的下一个 URL。 |
| go() | 从历史列表中加载特定的 URL。 |
Web Storage API
localStorage 对象
localStorage 对象提供对特定网站的本地存储的访问。它允许您存储、读取、添加、修改和删除该域的数据项。
存储的数据没有到期日期,并且在浏览器关闭时不会被删除。
这些数据将在几天、几周和几年内均可用。
localStorage.setItem("name", "Bill Gates");
localStorage.getItem("name");
sessionStorage 对象
sessionStorage 对象与 localStorage 对象相同。
不同之处在于 sessionStorage 对象存储会话的数据。
当浏览器关闭时,数据会被删除。
sessionStorage.setItem("name", "Bill Gates");
sessionStorage.getItem("name");
Storage 对象属性和方法
| 属性/方法 | 描述 |
|---|---|
| key(n) | 返回存储中第 n 个键的名称。 |
| length | 返回存储在 Storage 对象中的数据项数。 |
| getItem(keyname) | 返回指定的键名的值。 |
| setItem(keyname, value) | 将键添加到存储中,或者如果键已经存在,则更新该键的值。 |
| removeItem(keyname) | 从存储中删除该键。 |
| clear() | 清空所有键。 |
Web Worker API
什么是 Web Worker?
在 HTML 页面中执行脚本时,页面在脚本完成之前是无响应的。
Web Worker 是在后台运行的 JavaScript,独立于其他脚本,不会影响页面的性能。你可以继续做任何你想做的事情:点击、选取内容等,同时 web worker 在后台运行。
浏览器支持
表中的数字注明了完全支持 Web Workers 的首个浏览器版本:
| Chrome | IE | Firefox | Safari | Opera |
|---|---|---|---|---|
| Chrome 4 | IE 10 | Firefox 3.5 | Safari 4 | Opera 11.5 |
| 2010 年 1 月 | 2012 年 9 月 | 2009 年 6 月 | 2009 年 6 月 | 2011 年 6 月 |
检查 Web Worker 浏览器
在创建 web worker 之前,请检查用户的浏览器是否支持它:
if (typeof(Worker) !== "undefined") {
// Yes! Web worker support!
// Some code.....
} else {
// Sorry! No Web Worker support..
}
创建 Web Worker 文件
现在,让我们在外部 JavaScript 中创建我们的 Web Worker。
在这里,我们创建了一个重要的脚本。该脚本存储在 "demo_workers.js" 文件中:
let i = 0;
function timedCount() {
i ++;
postMessage(i);
setTimeout("timedCount()",500);
}
timedCount();
上面代码的重要部分是 postMessage() 方法 - 用于将消息发送回 HTML 页面。
创建 Web Worker 对象
现在我们有了 web worker 文件,我们需要从 HTML 页面调用它。
以下代码行检查 worker 是否已存在,如果不存在,它会创建一个新的 web worker 对象并运行 "demo_workers.js" 中的代码:
if (typeof(w) == "undefined") {
w = new Worker("demo_workers.js");
}
然后我们可以发送和接收来自 web worker 的消息。
向 web worker 添加一个 "onmessage" 事件侦听器。
w.onmessage = function(event){
document.getElementById("result").innerHTML = event.data;
};
当 Web Worker 发布消息时,将执行事件侦听器中的代码。来自 Web Worker 的数据存储在 event.data 中。
终止 Web Worker
当 web worker 对象被创建时,它会继续监听消息(即使在外部脚本完成之后)直到它被终止。
如需终止 web worker,并释放浏览器/计算机资源,请使用 terminate() 方法:
w.terminate();
重用 Web Worker
如果将 worker 变量设置为 undefined,则在它终止后,您可以重用以下代码:
w = undefined;
全部代码
<body>
<p id="test_p"></p>
<button onclick="stopW()">结束脚本</button>
<script>
// w.terminate();
//检查 Web Worker 浏览器 是否支持
if (typeof(Worker) !== "undefined") {
w = new Worker("demo_workers.js");
w.onmessage = function (event) {
document.getElementById("test_p").innerText = event.data
}
} else {
}
function stopW(){
w.terminate();
w = undefined;
}
</script>
</body>
JavaScript Fetch API
Fetch API 接口允许 Web 浏览器向 Web 服务器发出 HTTP 请求。
不再需要 XMLHttpRequest。
浏览器支持
表中的数字注明了完全支持 Fetch API 的首个浏览器版本:
| Chrome | IE | Firefox | Safari | Opera |
|---|---|---|---|---|
| Chrome 42 | Edge 14 | Firefox 40 | Safari 10.1 | Opera 29 |
| 2011 年 6 月 | 2016 年 8 月 | 2015 年 8 月 | 2017 年 3 月 | 2015 年 4 月 |
使用方式
可以创建一个txt文件读取。
async function getText(file) {
let x = await fetch(file);
let y = await x.text();
myDisplay(y);
}
Web Geolocation API
定位用户的位置
HTML Geolocation API 用于获取用户的地理位置。
由于这可能会损害隐私,除非用户批准,否则位置不可用。
使用 Geolocation API
<script>
const x = document.getElementById("demo");
function getLocation() {
//1. 检查是否支持 Geolocation
if (navigator.geolocation) {
//如果支持,请运行 getCurrentPosition() 方法 showError是用来处理错误
navigator.geolocation.getCurrentPosition(showPosition, showError);
} else {
//如果没有,则向用户显示一条消息
x.innerHTML = "Geolocation is not supported by this browser.";
}
}
//输出纬度和经度
function showPosition(position) {
x.innerHTML = "Latitude: " + position.coords.latitude +
"<br>Longitude: " + position.coords.longitude;
}
//处理错误信息
function showError(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
x.innerHTML = "User denied the request for Geolocation."
break;
case error.POSITION_UNAVAILABLE:
x.innerHTML = "Location information is unavailable."
break;
case error.TIMEOUT:
x.innerHTML = "The request to get user location timed out."
break;
case error.UNKNOWN_ERROR:
x.innerHTML = "An unknown error occurred."
break;
}
}
</script>
getCurrentPosition() 方法 - 返回数据
getCurrentPosition() 方法在成功时返回一个对象。会始终返回纬度、经度和精度属性。如果可用,则返回其他属性:
| 属性 | 返回 |
|---|---|
| coords.latitude | 以十进制数表示的纬度(始终返回)。 |
| coords.longitude | 以十进制数表示的经度(始终返回)。 |
| coords.accuracy | 位置精度(始终返回)。 |
| coords.altitude | 平均海平面以上的高度(以米计)(如果可用则返回)。 |
| coords.altitudeAccuracy | 位置的高度精度(如果可用则返回)。 |
| coords.heading | 从北顺时针方向的航向(如果可用则返回)。 |
| coords.speed | 以米/秒计的速度(如果可用则返回)。 |
| timestamp | 响应的日期/时间(如果可用则返回)。 |
实时定位
watchPosition()- 返回用户的当前位置,并随着用户移动(如汽车中的 GPS)继续返回更新的位置。clearWatch()- 停止 watchPosition () 方法。