Html Modernizer-加载多填充/使用自定义检测的正确方法

Html Modernizer-加载多填充/使用自定义检测的正确方法,html,modernizr,polyfills,Html,Modernizr,Polyfills,我想在网页上使用一些新的HTML5表单属性和输入类型。一些浏览器已经支持它们,其他浏览器不支持,也永远不会支持。这就是为什么我想使用现代化——这就是我的麻烦开始的原因 据我所知,Modernizer本身并不是一个polyfill,而是一个脚本,可以测试浏览器是否能够使用一些新的HTML5/CSS3内容。如有必要,可以加载“模拟”这些功能的polyfill,以便在不支持/较旧的浏览器中使用。我想这是对的 关于测试/加载:用Modernizer加载polyfills的正确或最佳方法是什么? 在文档中

我想在网页上使用一些新的HTML5表单属性和输入类型。一些浏览器已经支持它们,其他浏览器不支持,也永远不会支持。这就是为什么我想使用现代化——这就是我的麻烦开始的原因

据我所知,Modernizer本身并不是一个polyfill,而是一个脚本,可以测试浏览器是否能够使用一些新的HTML5/CSS3内容。如有必要,可以加载“模拟”这些功能的polyfill,以便在不支持/较旧的浏览器中使用。我想这是对的

关于测试/加载:用Modernizer加载polyfills的正确或最佳方法是什么?
在文档中,我发现:

Modernizr.load({
  test: Modernizr.geolocation,
  yep : 'geo.js',
  nope: 'geo-polyfill.js'
});
但有些页面也是这样做的:

if (Modernizr.touch){
   // bind to touchstart, touchmove, etc and watch `event.streamId`
} else {
   // bind to normal click, mousemove, etc
}
另外,我如何真正了解这些特性检测是如何调用的?每个特征检测都肯定存在类似于
modernizer.geolocation
的东西

在Modernizer GitHub存储库中,还有许多用户贡献的功能。如何在我的Modernizer版本中实现这些功能?还是最好只使用他们的生成器

在Safari中,HTML5表单验证可以工作,但是没有用于显示错误消息的UI。基本上,该功能只实现了一半。这就是为什么Modernizer在Safari中给出了一个误报,就像这里已经提到的:
显然有人用这种定制测试解决了这个问题,但我仍然不知道如何使用它。

您看到的两种技术都是有效的

对于
yep
/
nope
版本,这是加载要从单独文件中包含的多边形填充的理想方式。这不一定是Javascript——它也可以是CSS文件

对于标准JS
if()
block,如果在同一个JS文件中有一个依赖于块功能的代码,并且您希望根据功能是否可用来切换该代码,那么这将更加有用

因此,这两种变体都有自己的位置

但是,您也可能会看到
if()
block选项用于包含单独的JS文件,因为
yep
/
nope
语法在一些早期版本的Modernizer中不可用。Yepnope实际上是一个完全独立的库,它已并入Modernizer中,以使加载polyfill文件的语法更具可读性

如果您想知道Modernizer可以检测到哪些功能,答案当然在Modernizer文档中

在文档()中查找标题为“Modernizer检测到的特性”的部分。这有一个检测到的所有功能的列表,以及Modernizer为其指定的名称


Re您提到的中断功能detect——您链接的票证在将近一年前被标记为关闭,从票证上的注释来看,改进测试的代码似乎已添加到主Modernizer代码中。确保您运行的是最新版本,并仔细检查此版本是否适合您。

从Modernizr v3开始,通过Modernizr.load()使用Yepnope。一个好的替代方法是使用jQuery:

if (Modernizr.geolocation){
  console.log('match');
} else {
  // load polyfill
  $.getScript('path/to/script.js')
  .done(function() {
    console.log('script loaded');
  })
  .fail(function() {
    console.log('script failed to load');
  });
}

yepnope
现在已不推荐使用。