惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
T
The Blog of Author Tim Ferriss
S
SegmentFault 最新的问题
D
DataBreaches.Net
博客园_首页
罗磊的独立博客
B
Blog
T
Threat Research - Cisco Blogs
C
Cisco Blogs
GbyAI
GbyAI
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
G
GRAHAM CLULEY
H
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
爱范儿
爱范儿
SecWiki News
SecWiki News
T
Threatpost
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Schneier on Security
Schneier on Security
T
The Exploit Database - CXSecurity.com
Google Online Security Blog
Google Online Security Blog
T
Tor Project blog
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Y
Y Combinator Blog
H
Hacker News: Front Page
V
V2EX
Security Latest
Security Latest
Cloudbric
Cloudbric
Simon Willison's Weblog
Simon Willison's Weblog
Attack and Defense Labs
Attack and Defense Labs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed
博客园 - 三生石上(FineUI控件)
NISL@THU
NISL@THU
S
Secure Thoughts
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
V2EX - 技术
V2EX - 技术
Vercel News
Vercel News
P
Palo Alto Networks Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Application and Cybersecurity Blog
Application and Cybersecurity Blog
D
Docker
Google DeepMind News
Google DeepMind News
Webroot Blog
Webroot Blog

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活 翻译 – CSS Sprites:实用技术还是生厌之物? « 张鑫旭-鑫空间-鑫生活 纯CSS实现易拉罐3D滚动效果 « 张鑫旭-鑫空间-鑫生活 纯CSS实现侧边栏/分栏高度自动相等 « 张鑫旭-鑫空间-鑫生活 CSS+JavaScript实现页面不同布局的切换 « 张鑫旭-鑫空间-鑫生活 JavaScript实现最简单的拖拽效果 « 张鑫旭-鑫空间-鑫生活 自己写的无图片版jQuery zxxbox弹出框插件 « 张鑫旭-鑫空间-鑫生活 中国古代道家思想与网页重构的思考 « 张鑫旭-鑫空间-鑫生活 让所有浏览器支持HTML5 video视频标签 « 张鑫旭-鑫空间-鑫生活 纯CSS实现各类气球泡泡对话框效果 « 张鑫旭-鑫空间-鑫生活 JS HEX十六进制与RGB, HSL颜色的相互转换 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变、高光等文字效果 « 张鑫旭-鑫空间-鑫生活 去除冗余 – 精简您的CSS样式代码 « 张鑫旭-鑫空间-鑫生活 对overflow与zoom”清除浮动”的一些认识 « 张鑫旭-鑫空间-鑫生活 jQuery Pagination Ajax分页插件中文详解 « 张鑫旭-鑫空间-鑫生活 absolute绝对定位的非绝对定位用法 « 张鑫旭-鑫空间-鑫生活 网页布局思想浅议-淘宝新版首页为实例 « 张鑫旭-鑫空间-鑫生活 回流与重绘:CSS性能让JavaScript变慢? « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(二) « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(一) « 张鑫旭-鑫空间-鑫生活 60个极富创造性的震撼的电影海报设计 « 张鑫旭-鑫空间-鑫生活 jQuery Lightbox(balupton版)图片展示插件讲解 « 张鑫旭-鑫空间-鑫生活 博客内嵌flash音乐播放器代码、下载与使用 « 张鑫旭-鑫空间-鑫生活 CSS3 animate实现图片墙3D翻转效果 « 张鑫旭-鑫空间-鑫生活 图片旋转效果的一些研究、jQuery插件及实例 « 张鑫旭-鑫空间-鑫生活 CSS3 border-image详解、应用及jQuery插件 « 张鑫旭-鑫空间-鑫生活 jQuery-两款不同原理的圆角插件讲解 « 张鑫旭-鑫空间-鑫生活 页面可用性之outline轮廓外框的一些研究 « 张鑫旭-鑫空间-鑫生活 CSS3 transition实现超酷图片墙动画效果 « 张鑫旭-鑫空间-鑫生活 HTML CSS列表元素ul,ol,dl的研究与应用 « 张鑫旭-鑫空间-鑫生活 jQuery图片文本滚动切换插件jCarousel中文翻译与详解 « 张鑫旭-鑫空间-鑫生活 酷酷的jQuery鼠标悬停图片放大切换显示效果 « 张鑫旭-鑫空间-鑫生活 IE6下z-index犯癫不起作用bug的初步研究 « 张鑫旭-鑫空间-鑫生活 checkbox复选框的一些深入研究与理解 « 张鑫旭-鑫空间-鑫生活 jQuery之使用slideToggle实现垂直下拉菜单 « 张鑫旭-鑫空间-鑫生活 jQuery-innerfade内部列表自动淡入淡出插件 « 张鑫旭-鑫空间-鑫生活 jQuery-火焰灯效果导航菜单 « 张鑫旭-鑫空间-鑫生活 IE下css bug集合-翻译自haslayout.net « 张鑫旭-鑫空间-鑫生活 翻译-IE7/8@font-face嵌入字体与文字平滑 « 张鑫旭-鑫空间-鑫生活 jQuery-马化腾产品设计与用户体验的一些技术实现 « 张鑫旭-鑫空间-鑫生活 像素的世界及其在web开发制作中的应用 « 张鑫旭-鑫空间-鑫生活 css行高line-height的一些深入理解及应用 « 张鑫旭-鑫空间-鑫生活 CSS实现圆角六色渐变自适应按钮详解 « 张鑫旭-鑫空间-鑫生活 我熟知的三种三栏网页宽度自适应布局方法 « 张鑫旭-鑫空间-鑫生活 jQuery照片图像剪裁插件Jcrop中文翻译详解 « 张鑫旭-鑫空间-鑫生活 Ajax Upload多文件上传插件翻译及中文演示 « 张鑫旭-鑫空间-鑫生活 告别图片—使用字符实现兼容性的圆角尖角效果beta版 « 张鑫旭-鑫空间-鑫生活 大小不固定的图片、多行文字的水平垂直居中 « 张鑫旭-鑫空间-鑫生活 jQuery boxy弹出层对话框插件中文演示及讲解 « 张鑫旭-鑫空间-鑫生活 JavaScript实现新浪微博文字放大显示动画效果 « 张鑫旭-鑫空间-鑫生活 翻译:让网络更快一些——最小化浏览器中的回流(reflow) « 张鑫旭-鑫空间-鑫生活 jQuery之addClasas与removeClass使用实例 « 张鑫旭-鑫空间-鑫生活 关于Google圆角高光高宽自适应按钮及其拓展 « 张鑫旭-鑫空间-鑫生活 JavaScript实现图片幻灯片滚动播放动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery-鼠标经过显示大图并跟随鼠标效果插件 « 张鑫旭-鑫空间-鑫生活 关于gif图片(或png8)杂边锯齿的问题 « 张鑫旭-鑫空间-鑫生活 对html与body的一些研究与理解 « 张鑫旭-鑫空间-鑫生活 鲜为人知的一个解决兼容性问题的利器——小数 « 张鑫旭-鑫空间-鑫生活 搜狐白社会似iphone短信对话框效果的优化 « 张鑫旭-鑫空间-鑫生活 关于文字内容溢出用点点点(…)省略号表示 « 张鑫旭-鑫空间-鑫生活 jquery之append与insertBefore使用实例 « 张鑫旭-鑫空间-鑫生活 jQuery之图片关联伸缩效果 « 张鑫旭-鑫空间-鑫生活 jquery之图片左右切换动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery之replace字符串替换实现不同尺寸图片切换 « 张鑫旭-鑫空间-鑫生活 jQuery-实现图片的放大镜显示效果 « 张鑫旭-鑫空间-鑫生活 jQuery-单击文字或图片内容放大显示效果插件 « 张鑫旭-鑫空间-鑫生活 reflection.js-实现图片投影倒影效果js插件 « 张鑫旭-鑫空间-鑫生活 jQuery-很酷的弹出层效果js插件 « 张鑫旭-鑫空间-鑫生活 复选框单选框与文字对齐问题的研究与解决 « 张鑫旭-鑫空间-鑫生活 css margin的相关属性,问题及应用 « 张鑫旭-鑫空间-鑫生活 IE6下png背景不透明问题的综合拓展 « 张鑫旭-鑫空间-鑫生活
JS URL()和URLSearchParams() API接口详细介绍 « 张鑫旭-鑫空间-鑫生活
张鑫旭,zhangxinxu · 2019-08-26 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=8907
本文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可以联系授权。

网络 URL 占位图

一、先快速了解这两个API干嘛用的

以前我们要对地址栏中的URL地址进行分析处理,需要自己进行字符串分析,例如:

https://www.zhangxinxu.com/wordpress/?s=url

我们想要知道s参数后面的值是什么,往往需要进行字符切割匹配,要么正则匹配。

实际上,现在,浏览器已经有了内置的API接口可以对URL进行处理,这个API就是URLSearchParams()以及URL()

例如获取s的查询参数值,可以直接下面这样:

new URL('https://www.zhangxinxu.com/wordpress/?s=url').searchParams.get('s');

或者:

new URLSearchParams('?s=url').get('s');

二、先来了解下URLSearchParams()语法

语法

// URL查询字符串
var myUrlSearchParams = new URLSearchParams(strSearchParams);
// 查询字符序列
var myUrlSearchParams = new URLSearchParams(arrSearchSequence);
// 查询键值对象
var myUrlSearchParams = new URLSearchParams(objSearchKeyValue);

参数

strSearchParams

URL查询字符串。使用示意:

var params1 = new URLSearchParams('?s=url');

或者对当前地址栏地址的查询字符串进行实例化:

var params2 = new URLSearchParams(location.search);
arrSearchSequence

数组形式的查询字符序列。例如:

var params3 = new URLSearchParams([['s', 'url'], ['someId', 1]]);
objSearchKeyValue

键值对形式的查询对象。例如:

var params4 = new URLSearchParams({"s": "url", "someId": 2})

三、URLSearchParams实例方法们

上面执行new URLSearchParams()的返回值myUrlSearchParams就是一个URLSearchParams实例。

这个URLSearchParams实例包含众多方法,具体如下:

URLSearchParams.append(name, key)
添加新的键值对作为查询参数。例如:
var params = new URLSearchParams('?s=url');   // 也可以没有问号直接's=url'
params.append('from', 'zxx');
// 此时的查询字符串是:'s=url&from=zxx'

append查询字符串运行结果

URLSearchParams.delete(name)
删除已存在的查询参数。例如:
var params = new URLSearchParams('?s=url');
params.delete('s');
// 此时的查询字符串是:''

删除查询

URLSearchParams.entries()
返回查询参数们的迭代器对象,我们可以迭代该迭代器对象获得所有的键值对。例如使用for..of
var searchParams = new URLSearchParams("s=url&from=zxx");
// 显示所有的键值对
for (var pair of searchParams.entries()) {
   console.log(pair[0]+ ', '+ pair[1]); 
}

控制台输入结果示意:
遍历结果示意

URLSearchParams.forEach(callback)
此方法可以遍历查询对象。

其中callback是遍历方法,支持两个参数,分别是每个键值对的值和键。示意:

var searchParams = new URLSearchParams("s=url&from=zxx");
// 输出值和键的内容
searchParams.forEach(function(value, key) {
  console.log(value, key);
});

查询语句输出值

URLSearchParams.get(name)
返回指定关键字对象的值。例如:
var params = new URLSearchParams('s=url&from=zxx');
params.get('s');
// 返回值是:'url'

get参数使用示意

如果没有对应的值,则返回null

URLSearchParams.getAll(name)
以数组形式返回所有当前查询关键字对应的值,例如:
var params = new URLSearchParams('s=url&s=urlsearchparams&from=zxx');
params.getAll('s');
// 返回值是:['url', 'urlsearchparams']

getAll返回数组示意

URLSearchParams.has(name)
返回布尔值,true或者false,是否包含某个查询关键字。
var params = new URLSearchParams('?s=url');
params.has('s') == true;    // true

是否有查询关键字s

URLSearchParams.keys()
返回一个迭代器对象,允许迭代该对象中所有的关键字。使用示意:
var searchParams = new URLSearchParams("s=url&from=zxx");
// 显示所有的键
for (var key of searchParams.keys()) {
   console.log(key); 
}

迭代查询关键字们

URLSearchParams.values()
返回一个迭代器对象,允许迭代该对象中所有的关键字值。使用示意:
var searchParams = new URLSearchParams("s=url&from=zxx");
// 显示所有的值
for (var value of searchParams.values()) {
   console.log(value); 
}

值迭代器匹配

URLSearchParams.set(name, value)
有则替换,无则加冕。例如:
var params = new URLSearchParams('s=url&s=urlsearchparams&from=zxx');
params.set('s', 'css世界');
params.getAll('s');    // 返回值是:['css世界']

替换所有的s

可以看到会替换之前所有的's'查询参数值。下面这个例子展示“无则加冕”:

var params = new URLSearchParams('s=url'); 
params.set('from', 'zxx');
params.toString();    // 结果是:'s=url&from=zxx'

set方法添加效果示意
也就是原本没有对应参数的时候会添加这个参数。

URLSearchParams.sort()
方法将此对象中包含的所有键/值对就地排序,并返回undefined。排序顺序根据键的Unicode码位。该方法使用一种稳定的排序算法(即保留具有相同键的键/值对之间的相对顺序)。例如:
var searchParams = new URLSearchParams('c=4&a=2&b=3&a=1'); 
// 键值对排序
searchParams.sort();
// 显示排序后的查询字符串
console.log(searchParams.toString());    // 结果是:a=2&a=1&b=3&c=4

键值对排序结果示意

URLSearchParams.toString()
把URLSearchParams对象转换成查询字符串。这个代码示意上面多次出现,这里不重复展示。

URLSearchParams()兼容性

Edge17+支持。

URLSearchParams兼容性截图

四、再来了解下URL()语法

URL接口用于解析、构造、规范化和编码URL。其构造的实例支持若干属性和方法,可以用来读写URL相关的属性值。我们甚至可以把文件内容作为URL的一部分进行呈现。

在使用URL()之前,建议先做个浏览器支持与否的判断,例如:

if (window.URL) {
    // ...
}

另外,URL接口支持在web workers中使用。

语法

var myUrl = new URL(url, [base])

参数

url
相对地址或者绝对地址。如果是相对地址,需要设置base参数,如果是绝对地址,则会忽略base设置。我们也可以使用URL对象作为url参数。此时作用的值是URL对象中的href属性值。
base
如果URL地址是相对地址,则需要这个参数,作用是作为相对计算的基础地址。我们也可以使用URL对象作为base参数,此时作用的值是URL对象中的href属性值。如果不设置该参数,则会按照空字符串''进行处理。

如果参数值无法组合成完整URL地址,则会报TypeError错误。

测试与用法示意

基本使用示意:

var base = 'https://www.zhangxinxu.com';
// 结果是:https://www.zhangxinxu.com/study
console.log(new URL('study', base).href);
// 结果是:https://www.zhangxinxu.com/study
console.log(new URL('/study', base).href);

可以直接使用URL对象作为参数:

var base = 'https://www.zhangxinxu.com';
var urlFromBase = new URL('study', base);
// 结果是:https://www.zhangxinxu.com/study
console.log(new URL(urlFromBase).href);
// 结果是:https://www.zhangxinxu.com/wordpress
console.log(new URL('wordpress', urlFromBase).href);

使用URL对象作为参数示意

下面是带有较深层级base地址和不同相对地址形式的测试:

var base = 'https://www.zhangxinxu.com/study/a/b/c';
// 结果是:https://www.zhangxinxu.com/study/a/b/sp/icon
console.log(new URL('sp/icon', base).href);
// 结果是:https://www.zhangxinxu.com/study/a/b/sp/icon
// 上下结果对比表明./和裸露相对地址没有区别
console.log(new URL('./sp/icon', base).href);
// 结果是:https://www.zhangxinxu.com/study/a/sp/icon
// 向上一层URL层级深度
console.log(new URL('../sp/icon', base).href);
// 结果是:https://www.zhangxinxu.com/study/a/b/sp/icon
// 层级按照斜杠来算的
console.log(new URL('../sp/icon', base + '/').href);
// 结果是:https://www.zhangxinxu.com/sp/icon
// 斜杠开头表示跟地址开始匹配
console.log(new URL('/sp/icon', base).href);

眼见为实,下面的是控制台输出结果:

控制台输出的层级测试结果

下面是不同域名之间的测试:

var base = 'https://www.zhangxinxu.com';
// 结果是:http://image.zhangxinxu.com和https://image.zhangxinxu.com
// 没有协议的url认为是相对地址,协议取自base地址
console.log(new URL('//image.zhangxinxu.com', 'http://www.zhangxinxu.com').href);
console.log(new URL('//image.zhangxinxu.com', 'https://www.zhangxinxu.com').href);
// 结果是:https://image.zhangxinxu.com
// 这里url是完整的绝对地址,因此,忽略后面的base参数
console.log(new URL('https://image.zhangxinxu.com', base).href);

这是运行后的结果:

运行后的测试结果

下面是出错的测试:

// 没有绝对地址,会报错
console.log(new URL('').href);
console.log(new URL('//image.zhangxinxu.com').href);

报错截图

五、URL实例对象的属性和方法

new URL()返回值就是一个实例对象,包括下面这些属性和方法。

属性

已知有URL地址如下:

var url = new URL('https://www.zhangxinxu.com:80/wordpress/?s=url#comments');
var ftp = new URL('ftp://username:password@192.168.1.1/path/file');
hash
URL地址中的锚链值,包含字符串'#',例如这里url.hash的返回值是'#comments'
host
URL地址中host主机地址,包括协议端口号,这里url.host的返回值是'www.zhangxinxu.com:80'
hostname
URL地址中主机名称,不包括端口号,这里url.hostname的返回值是'www.zhangxinxu.com'
href
完成的URL地址。
origin [只读]
返回URL地址的来源,会包含URL协议,域名和端口。这里url.origin的返回值是'https://www.zhangxinxu.com:80'
password
返回URL地址域名前的密码。ftp协议中比较常见。这里ftp.password的返回值是'password'
username
返回URL地址域名前的用户名。ftp协议中比较常见。这里ftp.username的返回值是'username'
pathname
返回URL中的目录+文件名。例如这里ftp.pathname的返回值是'/path/file'
port
返回URL地址中的端口号。例如这里url.port的返回值是'80'ftp.port的返回值是''
protocol
返回URL地址的协议,包括后面的冒号':'。例如这里url.protocol的返回值是'https:'ftp.protocol的返回值是'ftp:'
search
返回URL地址的查询字符串,如果有参数,则返回值以问号'?'开头。例如这里url.search的返回值是'?s=url'
searchParams
返回一个URLSearchParams对象,可以调用URLSearchParams对象各种方法,对查询字符串进行非常方便的处理。例如我们想要知道查询关键字s对应的值,可以:
url.searchParams.get('s');

方法

toString()
返回的完整的URL地址,你可以理解为URL.href的另外一种形式,不过这个只能输出,不能修改值。
toJSON()
同样返回完整的URL地址,返回的字符串和href属性一样。

静态方法

URL.createObjectURL(object)
可以把File,Blob或者MediaSource对象变成一个一个唯一的blob URL。其中参数object可以是File,Blob或者MediaSource对象。
URL.revokeObjectURL(objectURL)
撤消之前使用URL.createObjectURL()创建的URL对象。其中参数objectURL表示之前使用URL.createObjectURL()创建的URL返回值。

静态方法实际使用案例一则
我们使用Ajax请求一个跨域图片避免canvas跨域生成问题的时候可以使用这两个静态方法:

var xhr = new XMLHttpRequest();
xhr.onload = function () {
    var url = URL.createObjectURL(this.response);
    var img = new Image();
    img.onload = function () {
        // 此时你就可以使用canvas对img为所欲为了
        // ... code ...
        // 图片用完后记得释放内存
        URL.revokeObjectURL(url);
    };
    img.src = url;
};
xhr.open('GET', url, true);
xhr.responseType = 'blob';
xhr.send();

兼容性

Edge 12+支持。

URL()兼容性截图

六、这两个JS API的polyfill

从兼容性表可以看出,URLSearchParams Edge 17才开始支持,而URL 从Edge 12才开始支持,似乎兼容性不佳,但是,这并不妨碍我们在实际项目中使用,为什么呢?因为有polyfill。

这里有一个一直支持到ES7最新规范的URL和URLSearchParams polyfill项目:https://github.com/lifaon74/url-polyfill

按照官方说法,兼容到IE 10+。

IE9究竟支不支持,还是仅仅是部分支持,我大致简单测试了一下,结论如下:

除了URL()几个静态方法以外的基本使用IE9都是支持的!

对于我来说,够用了够用了。

如果以后实际应用发现其他细节再更新。

七、结语

web这块,无论是CSS,HTML还是JS API都在不断进步,标准且跨平台,以前很多需要自定义的方法和特性,现在浏览器都已经原生支持,以前的那些语言框架价值越来越低。

是时候开始尝试拥抱原生,辛苦地学习与积累,简单且轻松的实现,面向产品,面向用户,立足未来,方能穿越长河。

那些咨询我前端问题的小伙伴,不用再问我任何关于Vue和React的问题了,我全部用都没用过,以后也不会用,不是我的方向,也不是未来的方向。

本文为原创文章,欢迎分享,勿全文转载,如果内容你实在喜欢,可以加入收藏夹,永不过期,而且还会及时更新知识点以及修正错误,阅读体验也更好。
本文地址:https://www.zhangxinxu.com/wordpress/?p=8907

(本篇完)