前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Chrome 最近带来了哪些有意思的新东西?

Chrome 最近带来了哪些有意思的新东西?

作者头像
ConardLi
发布于 2023-01-09 11:09:37
发布于 2023-01-09 11:09:37
53000
代码可运行
举报
文章被收录于专栏:code秘密花园code秘密花园
运行总次数:0
代码可运行

大家好,我是 ConardLi

好久没有解读 Chrome 更新了,今天挑一下最近几个版本里有意思的一些更新,和大家一起来看一下吧~

Chrome 107:识别渲染阻塞资源

对页面性能的可靠洞察对于我们构建好的用户体验是至关重要的,在以前,我们通常会依靠一些复杂的启发式方法来确定资源是否阻塞页面的渲染。

Chrome 107Performance API 新增了一个 renderBlockingStatus 属性,这个属性会提供来自浏览器的直接信号,用于识别阻塞页面渲染的资源,直到它们被下载下来。

下面的代码片段显示了如何获取所有资源的列表并使用新的 renderBlockingStatus 属性列出所有阻塞页面渲染的资源。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 获取所有资源
const res = window.performance.getEntriesByType('resource');

// 过滤出阻塞渲染的资源
const blocking =   res.filter(({renderBlockingStatus}) =>
      renderBlockingStatus === 'blocking');

优化这些阻塞资源的加载方式(改为异步加载或增加一些预渲染优化)对于我们网站的 Core Web Vitals 是非常有帮助的,大家可以用起来了~

Chrome 106:Pop-up API

Chrome 106,新增了对弹出式 API 的支持,HTML 元素新增了一个 popup 属性,它可以自动将元素带到站点的顶层,并提供简单的控件来切换是否可见。而开发者则不需要担心定位、堆叠元素、焦点或键盘交互等等,另外我们可以完全控制弹出层的样式、位置和大小,还可以灵活地修改默认行为。只使用 CSSHTML,不需要 JavaScript 就可以实现一个简单的弹出式交互了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div id="my-pop-up" popup>
  Hi ConardLi !
</div>
<button  popuptoggletarget="my-pop-up">
  Toggle Pop-up button
</button>

默认情况下,用户可以使用 ESC 键或单击其他元素等手势关闭这个弹出窗口。

了解更多:https://developer.chrome.com/blog/pop-ups-theyre-making-a-resurgence/

Chrome 106:新的 CSS 单位 ic

Chrome 106,新增了一个新的 CSS 单位 ic,它是一个设计用来调整文本大小的单位,可以根据字符的宽度或高度来测量长度。

比如我们设置了一个容器max-width8ic,那么无论字体大小如何,这个容器将最多包含 8个全角字形。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.container {
  border: solid 3px navy;
  max-width: 8ic; /* ic length unit out in chrome 106*/
  margin-bottom: 25px;
  margin-left: 15px;
  
}

.small{
  
 margin-top:25px;
 font-size: 20px;
}

.medium{
  font-size: 42px;
}

.large{
  font-size: 76px;
}

Chrome 105:容器查询和:has()属性

Chrome 105 新增了容器查询和 :has() 属性,这兄弟俩可以让我们能够查询父选择器的大小和样式信息,同时使子元素可以拥有响应式样式逻辑。有点类似 @media 查询,区别是它们根据的是容器的大小而不是视口的大小进行判断的。

要使用容器查询,我们可以在卡片容器上设置 container-typeinline-size

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.ard-container {
  container-type: inline-size;
}

然后我们就可以使用 @container 将该容器的样式应用到它的任何子节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.card {
  display: grid;
  grid-template-columns: 1fr 1fr;
}

@container (max-width: 400px) {
  .card {
    grid-template-columns: 1fr;
  }
}

当容器小于 400px 时,它就会切换到单列布局。

我们可以使用 :has() 伪类更进一步,它可以让我们检查父元素是否包含具有特定参数的子元素。例如,p:has(span) 表示一个段落选择器,你可以使用它来设置父段落本身或其中的任何内容的样式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p:has(span) {
  /* magic styles */
}

figure:has(figcaption) {
  /* this figure has a figcaption */
}

了解更多:https://developer.chrome.com/blog/has-with-cq-m105/

Chrome 105:Sanitizer API

在我之前的文章中有介绍过 Sanitizer API 提案:

告别 XSS!新的 W3C 提案助你安全操作 DOM

105 版本中,Chrome 对它提供了支持。Sanitizer API 可以让我们将任意字符串安全地插入到页面中。如果要动态渲染一段富文本,我们可以创建一个新的 Sanitizer 实例。然后,调用 setHTML() 方法插入经过 XSS 清理的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const mySanitizer = new Sanitizer();
const user_input = `<img src="" onerror=alert(0)>`;
elem.setHTML(user_input, { sanitizer: mySanitizer });

const config = {
  allowElements: [],
  blockElements: [],
  dropElements: [],
  allowAttributes: {},
  dropAttributes: {},
  allowCustomElements: true,
  allowComments: true
};
// sanitized result is customized by configuration
const mySanitizer = new Sanitizer(config);

更详细的介绍可以查看我上面的文章~

一些弃用

  • Chrome 107
    • 弃用对 HTTP Expect-CT Header 的支持
  • Chrome 106
    • 弃用 HTTP/2 Server Push 能力
  • Chorme 105:
    • 弃用非安全上下文(未开启https的站点)的 Web SQL
    • 弃用 Cookie domain 属性中的非 ASCII 字符;
    • 弃用 Navigation API 中的 transitionWhilerestoreScroll 方法;

最后

参考链接:

  • https://chromestatus.com/features#milestone%3D107
  • https://chromestatus.com/features#milestone%3D106
  • https://chromestatus.com/features#milestone%3D105

如果你有任何想法,欢迎在留言区和我留言,如果这篇文章帮助到了你,欢迎点赞和关注。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 code秘密花园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
一万字ES6的class类,再学不懂,请来找我(语法篇)
上面这种写法跟传统的面向对象语言(比如 C++ 和 Java)差异很大,很容易让新学习这门语言的程序员感到困惑。
coder_koala
2021/11/12
3480
ES5的继承和ES6的继承有什么区别?让Babel来告诉你
如果以前问我ES5的继承和ES6的继承有什么区别,我一定会自信的说没有区别,不过是语法糖而已,充其量也就是写法有区别,但是现在我会假装思考一下,然后说虽然只是语法糖,但也是有点小区别的,那么具体有什么区别呢,不要走开,下文更精彩!
街角小林
2022/03/21
6990
ES5的继承和ES6的继承有什么区别?让Babel来告诉你
详解ES6中的class
class是一个语法糖,其底层还是通过 构造函数 去创建的。所以它的绝大部分功能,ES5 都可以做到。新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。
木子星兮
2020/07/16
5290
ES6语法中类(class)的实现原理
JavaScript语言不同于其他的类C语言,没有提供类的概念,但是可以提供类似的语法糖来实现JS面向对象的编程范式,本质上不是严格意义上的类
伯爵
2019/10/12
2.1K0
ES6语法中类(class)的实现原理
ES6-标准入门·Class 类
直至 ES6,JavaScript 终于有了“类”的概念,它简化了之前直接操作原型的语法,也是我最喜欢的新特性之一,但此类非彼类,它不同于熟知的如 Java 中的类,它本质上只是一颗语法糖。
数媒派
2022/12/01
3070
玩转ES6(四)Set、Map、Class类和decorator 装饰器
在看Class之前建议看一下js的面向对象 https://juejin.im/post/5b8a8724f265da435450c591
前端迷
2019/12/03
8880
ES6的class详解
声明创建一个基于原型继承的具有给定名称的新类。 和类表达式一样,类声明体在严格模式下运行。构造函数是可选的。类声明不可以提升(这与函数声明不同)
用户10106350
2022/10/28
3840
【THE LAST TIME】一文吃透所有JS原型相关知识点
首先我想说,【THE LAST TIME】系列的的内容,向来都是包括但不限于标题的范围。
Nealyang
2019/11/04
1.1K0
JS原生方法原理探究(六)从 Babel 转译过程浅谈 ES6 实现继承的原理
都说 ES6 的 Class 是 ES5 的语法糖,那么 ES6 的 Class 是如何实现的呢?其实现继承的原理又是什么呢?不妨我们通过 Babel 转译代码的方式,看看其中有什么门道。
Chor
2021/06/08
1.2K0
es6 class
1.Es6引入了Class 类这个概念,作为对象的模板,通过class 关键字,可以定义类。 2.类和模块的内部,默认就是严格模式,所以不需要使用use strict 指定运行模式。 3.constructor 方法就是类的默认方法,通过new 命令生成对象实例时,自动调动该   方法,一个类必须有constructor 方法,如果没有显示定义,一个空的constructor   方法会默认添加。 4.类的实例对象   必须使用new ,像函数那样调用Class ,将会报错。     例如:       c
用户1197315
2018/01/19
6190
Babel下的ES6兼容性与规范
IMWeb前端团队
2017/12/28
2.1K0
深入理解class的继承,助你成为优秀的前端
Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多。
前端老鸟
2019/07/29
3630
深入理解class的继承,助你成为优秀的前端
ES6——类(Class)
ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。 ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。上面的代码用 ES6 的class改写,就是下面这样。
羊羽shine
2019/07/31
1.1K0
理解装饰器是怎么使用的
js 和 ts 中经常看到@+函数名的字样这个就是装饰器。它可以修饰类,类的属性,类的原型上的方法,说的简单一点它就是一个函数,可以传递参数在修饰的时候把这个类的属性传递给修饰的函数。
小丑同学
2020/09/21
6760
面试官问:JS的this指向
面试官出很多考题,基本都会变着方式来考察this指向,看候选人对JS基础知识是否扎实。读者可以先拉到底部看总结,再谷歌(或各技术平台)搜索几篇类似文章,看笔者写的文章和别人有什么不同(欢迎在评论区评论不同之处),对比来看,验证与自己现有知识是否有盲点,多看几篇,自然就会完善自身知识。
若川
2020/03/19
7940
深入 Babel 6 loose 模式
Babel 的 loose 模式将 ES6 代码转译成 ES5 代码,loose 模式是不太忠实于 ES6 语义的。这篇文章解释了它是怎么工作的以及它的优点与缺点(剧透:通常是不推荐的)。
逆葵
2019/04/25
4K0
JS 继承
用过 React的读者知道,经常用 extends继承 React.Component:
grain先森
2019/03/28
3.1K0
JS 继承
es6转es5_es6转es5插件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
7380
es6转es5_es6转es5插件
ECMAScript中类与继承详解(Java对比学习)
如果声明一个一个类的时候没有声明构造函数,那么会默认添加一个空的构造函数,构造函数在new实例化一个对象的时候会被调用
coder_koala
2019/07/30
4520
聊一聊面试中经常被问到的Tree Shaking
天下武功,唯快不破!最新版的 antd 以及 vue 都对 Tree Shaking 提供了支持。我们内部的组件在支持这部分功能时,也专门梳理了相关的特性。这是四月份写的文章了,长时间不用就会忘,复习一下!
前端迷
2020/08/28
2.1K0
聊一聊面试中经常被问到的Tree Shaking
推荐阅读
相关推荐
一万字ES6的class类,再学不懂,请来找我(语法篇)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档