javascript - 特征检测的最佳方法:focus-within 伪类
问题描述
我找不到任何使用 @supports 的语法与伪类一起使用,除非not
它非常特定于该伪类。
检测浏览器是否支持焦点内的最佳方法是什么,因为我不想编写很多会在几个版本中改变的浏览器黑客?我正在使用 Node 和 npm,但不想为它导入整个包(通常不是处理事情的最佳方式)。
尝试读取浏览器版本字符串或使用当今的浏览器解析黑客不是一个好主意,因为当浏览器开始支持某个功能时将很难维护,因此我正在寻找除@supports 之外的功能检测方法。有没有办法在javascript中确定这一点?
解决方案
由于它是一个伪类,因此是选择器的一部分,因此您需要@supports selector (…)
这里的语法 - 但浏览器对此的支持还不是很好。(目前基本上只有 Firefox。)
通过一些快速研究,我发现了https://github.com/Modernizr/Modernizr/issues/2270 - 关于在 Modernizr 库中实施测试的讨论的一部分。用户 patrickkettner 建议以下 JavaScript 解决方案:
实际上!有一个更简单的方法。
document.querySelector
抛出无效的选择器。你可以document.querySelector(':focus-within')
在 try-catch 中调用,如果它不抛出它应该被支持。我们可能会找到一个给出错误结果的浏览器,在这种情况下,我们需要实际测试样式。然而,与此同时,由于它是一个现代功能,我们现在应该很好地进行嗅探测试
由于这个基本测试似乎仍然是 Modernizer 目前在这方面所做的一切(https://github.com/Modernizr/Modernizr/blob/master/feature-detects/css/focuswithin.js),我想这应该是安全的使用。
推荐阅读
- java - 在字节码层面,初始化一个java内部类的流程是什么?
- android - android中的Google Map Places自动完成错误429
- elasticsearch - Elasticsearch 滚动 API 返回 terminate_early 而没有 scroll_id
- javascript - 如何 DOM 使选择元素值从一个 javascript 函数到另一个
- javascript - React.js:在构造函数中使用类的组件
- ms-access - 触发 MouseOver 事件标签
- javascript - 在 Flask 中运行 python 脚本时动态更改 HTML
- postgresql - 如何从手机访问 postgreSQL 数据库?
- html - 内部 DIV 溢出时更窄的 DIV
- elasticsearch - 通过将路由键更改为两个字段值的组合,将弹性搜索文档重新索引到另一个索引