【发布时间】:2018-01-09 05:43:35
【问题描述】:
当我们谈论浏览器兼容性时,大多数时候我们将其定义为应用程序将支持的最低浏览器版本列表。例如:
IE9+、Firefox 25+、Chrome 32+等
在测试兼容性时,我们通常会测试基线和最新版本。 如果我们想让它更广泛,我们可以使用 SauceLabs 等工具来测试介于两者之间的所有版本。
我的问题不是我们是否可以测试兼容性,而是我们应该或者我们应该如何考虑应该支持哪个版本的浏览器。
例如,我遇到了aurelia-polyfills 的问题。
库无法在 Firefox 35 中的 (function(o, s) { ... }(Object, Symbol)) 行和 Symbol is not defined 加载。
此代码在 Firefox 29 和最新版本 (54) 中运行良好。不知道35前后有多少版本会遇到这个问题。
IMO,这个问题更多地与 Firefox 相关,而与库关系不大,因为它应该将 Symbol 取消引用为 undefined 并让代码检查并正确处理它。类似于IE没有正确处理enum等关键字的问题。
现在的问题是,这应该被认为是库的错误还是库应该声明不支持这个中间版本的 Firefox?
一方面,排除这个版本是有意义的,因为它是浏览器的“错误行为”。图书馆作者不能对浏览器提出的任何和所有问题进行打击。尤其是现在,与过去相比,浏览器的新版本更加频繁。有些错误是必然会发生的。
另一方面,这正是“浏览器兼容性”的意义所在,应该加以处理。库作者不能忽略它们,因为它们是客户使用的。但在这种特殊情况下,它不会起作用,因为无论何时访问Symbol 都会导致系统崩溃。
另外一点是,当浏览器兼容性表更新时,它会“转移”到那些有问题的版本。
这意味着要么将兼容性表从“IE9+, Firefox 25+, ...”更新为“IE10+, Firefox 35+,...”和“WTF”,或者强制使用更窄的表,例如“IE10+、Firefox 52+、……”。
我认为我们要么硬着头皮继续支持“所有最新版本”,要么在兼容性表中留下一些漏洞,只支持“黄金”版本。
你会推荐什么?
顺便说一句,我对 Firefox 没有任何意见,仅以它为例。
【问题讨论】:
标签: javascript browser cross-browser compatibility