我在项目中使用OpenLayers。要支持使用旧版浏览器的用户,必须使用“{1}}”,“{1}}”和“{1}}”。
OpenLayers本身建议使用Polyfill.io服务。这显示在他们的一个examples。
中这需要我将外部URL(https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL)加载到用户的浏览器中。该服务查看浏览器的用户代理,如果浏览器旧,则为其提供Polyfill,否则此文件为空。当然,在其他地方运行代码是一个我不想负责的安全线程,所以我更愿意自我托管。
Polyfill.io服务是available for running locally,但我必须为此运行服务器。我宁愿不这样做。
相反,我想向所有人提供静态JS文件。我担心的是:
非常感谢你的帮助。
答案 0 :(得分:1)
通用答案,并非专门针对polyfill.io或openlayer。
一个好的书面填充应始终通过检查方法/对象/功能是否可用来开始。如果是这样,如果不添加,则什么都不做。
在每个旧浏览器中都可以使用,那么你需要自己做一些调查。当然,旧版本的 Netscape Navigator 无法处理部分或全部的polyfill,因为JavaScript是一种活生生的语言。通常,您希望能够提供从IE7到Edge,Safari,Opera,Chrome和Firefox的所有功能。最好是开始遵守W3C标准的版本。
这些版本包含用于编写polyfill的所有标准JavaScript构建块。如果浏览器无法模仿更现代方法的行为,我认为polyfill应该默默地失败,并且应该找到另一种解决方案。
如果文件很大,则取决于您要包含的polyfill数量。但一般来说它的范围从几KB到几百。
总之:polyfill绝不应该尝试替换已经存在的函数,并且 - 如果写得正确 - 应该可以在任何浏览器中使用。如果由于缺少依赖性而无法执行polyfill,则应在调试期间通知程序员或更好地提供必要的文档。
polyfill.io 在其文档中说明了以下内容:
我们使用针对每个功能的测试套件测试浏览器支持。浏览器只有在通过所有测试时才被认为是合规的,因此这是一个相当全面的测试而不是天真的特征检测。要在您正在使用的浏览器中查看功能的测试套件,请单击功能列表中的“测试”链接。以下结果是使用BrowserStack托管的浏览器生成的。