【问题标题】:Scan Javascript for browser compatibility扫描 Javascript 以获取浏览器兼容性
【发布时间】:2013-03-29 12:00:54
【问题描述】:

是否有工具可以扫描我的 Javascript 代码以查找可能并非在所有浏览器中都存在的功能?

我的库完全是非 UI 的,所以我不关心某些东西是如何“显示”的。我正在寻找类似于 Mozilla 的 Javascript MDN 中的内容。例如,对于 Array.prototype.indexOf,他们警告说它是最近添加的 ECMAScript,并非在所有浏览器中都存在(并且通常提供存根)。 我正在寻找的是一个工具,它可以列出我的代码中属于这一类的函数。

【问题讨论】:

  • 有点棘手,使用无类型语言。
  • JSLint 将衡量您的代码质量并警告您常见错误,但我不确定它是否能完成您的工作。
  • 致所有潜在的回答者:只是将链接转储到“我可以在浏览器 y 中使用 x”网站 不是答案
  • @ThiefMaster:虽然这些不是很好的答案,但即时删除很容易。让社区也有话说。强大的力量伴随着伟大的节制......
  • 如果还没有这样的工具,我会闻到我的下一个项目。哈!虽然我很难相信它还不存在。

标签: javascript ecmascript-5


【解决方案1】:

您可以使用eslint-plugin-compat,这是ESlint linting 实用程序的插件。您甚至可以使用Browserlist 来配置您想要支持的浏览器。

安装非常简单。你必须安装 eslint 和这个插件:

npm install --save-dev eslint-plugin-compat

yarn add --dev eslint eslint-plugin-compat

并添加一个ESlint配置文件:

// .eslintrc
{
  "extends": ["plugin:compat/recommended"]
}

将支持的浏览器添加到您的package.json 文件中:

// sample configuration (package.json)
{
  // ...
  "browserslist": ["last 2 Chrome versions", "IE 11"],
}

然后运行 ​​linter:

eslint yourfile.js

在我的例子中,这是输出:

92:9   error  Promise.all() is not supported in IE 11  compat/compat
94:9   error  Promise.all() is not supported in IE 11  compat/compat

【讨论】:

    【解决方案2】:

    更新:

    查看answer from Stephan Vierkant,它显示了解决此问题的插件。


    没有这个工具,有a lot of browsers

    我认为有一种替代方法可以扫描您的代码以兼容“所有”浏览器,尽管这确实是一件有用的事情。大多数人会做以下两件事来确保一定程度的跨浏览器兼容性。

    使用库

    您可以使用像underscore.jsjQueryDojoModernizr 等为您包装浏览器不兼容性的库。因此,您可以例如使用 jQuery.inArray,它可以在 jQuery 涵盖的所有浏览器中运行,并提供一个通用界面供您使用。

    限制浏览器支持

    确定您的应用程序要支持哪些浏览器,在您的网站上说明,然后在这些浏览器中进行测试。如果您拥有它们,则可以在本机上进行测试,也可以使用 browserstack 之类的工具对您没有的浏览器进行测试。 This answer 还为此列出了更多替代方案。

    最后,在编写代码时可以依赖最佳实践和个人经验。

    【讨论】:

    • 当然我可以限制支持,但尤其是对于非图形库,这似乎是一个糟糕的选择。就库而言,如果我想发布自己的代码(库),我必须将其添加为依赖项,如果可能的话,我想避免这种情况。此外,它们通常比我需要的要多得多,即使它们支持自定义构建,我仍然必须弄清楚我到底需要什么。
    • 当然可以避免对库的依赖。然后,您将不得不再次完成他们的工作/复制代码,恕我直言,这比对维护良好的库的依赖更糟糕。但即使你这样做,我也很确定你的库不会支持 Mosaic 浏览器或某些特殊情况。
    • 但是就像我说的那样,我仍然必须弄清楚我需要涵盖哪些功能。是的,我不太乐意为自己填充,因为它对我自己的库来说是“污垢”。但是如果只是Array.prototype.indexOf,我宁愿自己添加也不要整个第三方库。即使只是为了提供信息,我正在寻找的那种工具对我来说也会很有趣。
    • 确实是这样,但正如我所说,没有这样的工具。继续,编写您的库,并在尽可能多的浏览器中对其进行测试。
    • 经过很长一段时间又随机遇到这个问题,我现在觉得使用库是最好的方法。所以我会接受这个答案,即使真的很晚:)
    【解决方案3】:

    更新:

    可用于 Javascript 兼容性检查器的新链接:https://seedmanc.github.io/jscc/


    检查器不再可用。


    搜索相同的问题(在这几年之后),我碰到了 Javascript 兼容性检查器

    它提示了我的脚本与主流浏览器的兼容性。

    【讨论】:

    • 谢谢!不幸的是,使用箭头符号之类的快速测试报告为“未发现问题”,我认为这不太可能。
    • @IngoBürk 确实,它有一种全新开始的感觉,但它可能会随之发展。
    • @raratiru 链接断开。
    • @crantok 谢谢,服务没了,我更新了答案。
    • @IngoBürk 最后,结论是该服务太笨拙而无法发展。
    【解决方案4】:

    您可以将代码粘贴到https://jshint.com/,它会告诉您任何需要注意的“新”语言功能。但是它并没有指出哪些浏览器缺少哪些功能。

    【讨论】:

      猜你喜欢
      • 2012-10-19
      • 2011-09-01
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 2012-08-09
      相关资源
      最近更新 更多