浏览器兼容性扫描Javascript

23

有没有一种工具可以扫描我的Javascript代码,查找在某些浏览器上可能不存在的函数?

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


2
有点棘手,因为这是一种无类型语言。 - Thilo
JSLint 可以衡量您的代码质量并警告您常见的错误,但我不确定它是否能达到您想要的效果。 - Brandon Boone
3
给所有潜在回答者:仅仅把一个“我能在浏览器y中使用x吗”的链接丢过来 不是一个答案!请不要这样做。 - ThiefMaster
1
@ThiefMaster:虽然那些不是好的回答,但请少一点即时删除。让社区也有发言权。伴随着强大的力量而来的是伟大的调节…… - Thilo
2
如果还没有这样的工具,我闻到了我的下一个项目。哈!虽然我很难相信它还不存在。 - Ingo Bürk
显示剩余7条评论
4个回答

9
你可以使用 eslint-plugin-compat,这是一个用于 ESlint 代码检查工具的插件。你甚至可以使用 Browserlist 来配置你想要支持的浏览器。

Nice animation about eslint-plugin-compat

安装非常容易。您需要安装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"],
}

然后运行代码检查器:
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

3

最新消息:

请查看Stephan Vierkant的答案,他展示了一个解决这个问题的插件。


并没有这样的工具,而且有很多浏览器

我认为还有一种替代方法,可以确保代码能在“所有”浏览器上兼容,虽然这确实会是一件非常有用的事情。大多数人都采取以下两种方式来确保跨浏览器兼容性:

使用库

您可以使用像underscore.jsjQueryDojoModernizr等库,它们为您包装了浏览器不兼容性。因此,您可以例如使用jQuery.inArray,在所有jQuery覆盖的浏览器中使用共同的接口。

限制浏览器支持

决定要支持哪些浏览器,并在您的网站上声明它们,然后在这些浏览器上进行测试。如果您没有这些浏览器,则可以使用像browserstack这样的工具进行测试。 此答案 还列出了更多的替代方案。

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


当然我可以限制支持,但特别是对于非图形库来说,这似乎是一个糟糕的选择。就库而言,如果我想发布自己的代码(库),我必须将其添加为依赖项,如果可能的话,我想避免这样做。此外,它们通常提供比我需要的更多的功能,即使它们支持定制构建,我仍然需要弄清楚我需要什么。 - Ingo Bürk
当然可以避免对库的依赖。但这样你就需要重新编写代码或复制代码,我认为这比依赖于一个维护良好的库更糟糕。即使你这样做了,我也很确定你的库不会支持Mosaic浏览器或某些特殊情况。 - crackmigg
但是就像我说的那样,我仍然需要弄清楚我需要覆盖哪些函数。是的,我并不喜欢自己填充,因为这会污染我的库。但如果只是Array.prototype.indexOf,我宁愿自己添加它,也不想要整个第三方库。即使只是出于信息目的,我也对我正在寻找的工具感兴趣。 - Ingo Bürk
确实如此,但正如我所说,没有这样的工具。请继续编写您的库,并在尽可能多的浏览器中进行测试。 - crackmigg
经过很长时间的随机运行,我现在感觉使用库是最好的选择。所以,即使很晚,我也会接受这个答案 :) - Ingo Bürk

1

更新:

Javascript兼容性检查器的新链接已经发布:https://seedmanc.github.io/jscc/


该检查器不再可用。


寻找同样的问题(经过这几年之后),我偶然发现了 Javascript 兼容性检查器

它让我了解了我的脚本在主要浏览器中的兼容性情况。


谢谢!不幸的是,使用箭头符号等进行快速测试时报告为“未发现问题”,我觉得这很不可能。 - Ingo Bürk
@IngoBürk 确实,它有一种重新开始的感觉,但它可能会随之演变。 - raratiru
@raratiru 链接已损坏。 - crantok
@crantok 谢谢,服务已经停止,我更新了我的答案。 - raratiru
@IngoBürk 最终的结论是,这项服务过于笨拙,无法进化。 - raratiru

0

你可以将你的代码粘贴到https://jshint.com/,它会告诉你要注意哪些“新鲜”的语言特性。但是它并不会指出哪些浏览器缺少哪些功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接