pin_drop当前位置:知识文库 ❯ 图文

HTML5 API:HTML5 URL API - 完整教程与代码示例

一、教程简介

URL API 提供了在 JavaScript 中解析、构建和操作 URL 的标准接口。通过 URL 构造函数可以轻松解析 URL 的各个组成部分(协议、主机、路径、查询参数、哈希等),通过 URLSearchParams 可以方便地操作查询字符串。该 API 替代了手动字符串拼接和正则解析,是处理 URL 的推荐方式。

二、核心概念

URL 组成部分

代码示例

https://user:pass@example.com:8080/path/page?name=test&id=1#section
  │       │     │    │          │    │       │              │       │
  protocol │  password  hostname port  pathname  search     │    hash
        username                                    searchParams

URL 对象属性

属性 说明 示例
href 完整 URL https://example.com/path?q=1#h
origin 源(协议+主机+端口) https://example.com
protocol 协议 https:
username 用户名 user
password 密码 pass
host 主机+端口 example.com:8080
hostname 主机名 example.com
port 端口 8080
pathname 路径 /path/page
search 查询字符串 ?name=test&id=1
searchParams URLSearchParams 对象 -
hash 哈希 #section

URLSearchParams 方法

方法 说明
append(name, value) 添加参数
delete(name) 删除参数
get(name) 获取第一个值
getAll(name) 获取所有值
has(name) 是否存在
set(name, value) 设置参数(覆盖)
sort() 排序参数
toString() 转为字符串
keys() 遍历键名
values() 遍历值
entries() 遍历键值对
forEach() 遍历

三、语法与用法

解析 URL

代码示例

const url = new URL('https://example.com/path?page=1&sort=name#top');
console.log(url.protocol);   // 'https:'
console.log(url.hostname);   // 'example.com'
console.log(url.pathname);   // '/path'
console.log(url.search);     // '?page=1&sort=name'
console.log(url.hash);       // '#top'

操作查询参数

代码示例

const params = new URLSearchParams('name=test&age=25');
params.append('city', 'Beijing');
params.set('age', '26');
params.delete('name');
console.log(params.toString()); // 'age=26&city=Beijing'

构建 URL

代码示例

const url = new URL('https://api.example.com/search');
url.searchParams.set('q', 'HTML5');
url.searchParams.set('page', '1');
url.searchParams.set('limit', '20');
console.log(url.href);
// https://api.example.com/search?q=HTML5&page=1&limit=20

四、代码示例

示例一:URL 解析与构建工具

完整的 URL 解析与构建工具示例,包含 URL 解析、查询参数操作、实时构建结果等功能。

五、浏览器兼容性

浏览器 URL URLSearchParams
Chrome 19+ 49+
Firefox 26+ 44+
Safari 10+ 10.1+
Edge 12+ 17+
Opera 15+ 36+
IE 不支持 不支持

六、注意事项与最佳实践

1. URL 编码

代码示例

// URL 构造函数自动处理编码
const url = new URL('https://example.com/search');
url.searchParams.set('q', '中文 测试');  // 自动编码
console.log(url.href); // ?q=%E4%B8%AD%E6%96%87+%E6%B5%8B%E8%AF%95

// 手动编码/解码
encodeURIComponent('中文'); // '%E4%B8%AD%E6%96%87'
decodeURIComponent('%E4%B8%AD%E6%96%87'); // '中文'

2. 相对 URL 解析

代码示例

// 基于当前页面解析相对 URL
const url = new URL('/api/data', location.origin);

// 基于指定基础 URL 解析
const url = new URL('../other', 'https://example.com/path/page');

3. URL 验证

代码示例

function isValidURL(string) {
    try {
        new URL(string);
        return true;
    } catch (_) {
        return false;
    }
}

七、代码规范示例

代码示例

class URLBuilder {
    constructor(baseURL) {
        this.url = new URL(baseURL);
    }

    setPath(path) {
        this.url.pathname = path;
        return this;
    }

    addParam(key, value) {
        this.url.searchParams.append(key, value);
        return this;
    }

    setParam(key, value) {
        this.url.searchParams.set(key, value);
        return this;
    }

    removeParam(key) {
        this.url.searchParams.delete(key);
        return this;
    }

    setHash(hash) {
        this.url.hash = hash;
        return this;
    }

    build() {
        return this.url.href;
    }

    getParams() {
        return Object.fromEntries(this.url.searchParams.entries());
    }
}

// 使用
const url = new URLBuilder('https://api.example.com')
    .setPath('/search')
    .setParam('q', 'HTML5')
    .setParam('page', '1')
    .setHash('results')
    .build();

八、常见问题与解决方案

常见问题

Q1:URL 构造函数报错?

原因:传入的不是合法的绝对 URL。解决方案:确保包含协议(http/https),或使用第二个参数指定 base URL。

Q2:URLSearchParams 遍历顺序?

解答:按照参数添加的顺序遍历,使用 sort() 可以按字母排序。

Q3:如何判断两个 URL 是否同源?

解决方案:比较两个 URL 的 origin 属性是否相等。

代码示例

function isSameOrigin(url1, url2) {
    return new URL(url1).origin === new URL(url2).origin;
}

九、总结

URL API 提供了标准的 URL 解析和操作接口,URL 构造函数可以解析 URL 的各个组成部分,URLSearchParams 可以方便地操作查询参数。相比手动字符串拼接和正则解析,URL API 更安全、更简洁、更标准。使用时注意 URL 编码的自动处理、相对 URL 的解析方式,以及通过 try-catch 进行 URL 验证。

标签: URL API URL解析 URLSearchParams 查询参数 URL构建

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: HTML5 API:HTML5 Blob API - 完整教程与代码示例 下一篇: HTML5 API:HTML5 requestAnimationFra - 完整教程与代码示例

poll相关推荐