0

我一直运气不好试图让它工作,所以我希望有人能在这里提供帮助。

在 Java 中,我需要能够获取包含 JavaScript 的 HTML 页面,并在不执行 JavaScript 代码的情况下检测任何 JavaScript 错误,最好是不执行 JavaScript 代码。

我找到了这篇文章: Java 的 Javascript 解析器

而且我试图弄清楚我应该如何使用 Caja 来做到这一点,但我很难找到任何文档,其中包含与我正在做的事情接近的任何工作示例。

因此,我查看了那篇文章中也提到的 Nashorn。我发现了一些示例,它们展示了如何从 Java 执行 JavaScript 代码,但这并不能处理整个 HTML 页面。即使这样,执行似乎也不包括验证常见 JavaScript 函数的能力(例如,它没有听说过“警报”)。

任何人都可以推荐一些可以做我想做的事情,并为他们的文档指出正确的方向或给我一个例子吗?

4

1 回答 1

1

jshint 作为一个独立的产品似乎很适合这个:

我只会介绍第 3 个解决方案的技术难题,因为我最终也设法让它工作了......

剧透警报:尚未检测到“alert()”...解决方案 nb 2 将对此有所帮助...

您首先需要获取这个特定的 jshint 版本:https ://github.com/jshint/jshint/releases/tag/2.4.4

v2.7.0 之后的任何东西现在都将失败,我个人放弃了密集修补原型和命名空间......从 v2.4.4 到 v2.6.3 的版本无需修改即可工作,但功能有限。

在发行说明中,专门写了“对 Nashorn JavaScript 引擎的支持”正在处理此版本。我正在使用 JDK8 nashorn 1.8.0_45 进行此测试。

下一步是从这个版本中提取这个单个文件jshint-2.4.4/dist/jshint-rhino.js

现在您需要在脚本模式下运行 nashorn/jjs,并且您需要具体说明要验证的单个文件。在解决方案 2(基于 nodejs)中,您可以在文件夹下执行多个文件或完整的层次结构......

创建一个简单的文件file.js

function(){}

现在运行以下命令(请注意--的存在):

jjs -脚本 jshint-rhino.js -- file.js

这将为您提供以下输出:

Missing name in function declaration. (file.js:1:9)
> function(){}

因此,这涵盖了如何使用 nashorn 以简单的方式运行 jshint ......使用第三种解决方案,至少您可以找到缺少的分号和几个典型的错误。但这不是灵丹妙药,对我来说也不是真正的选择。

我个人的偏好是只坚持解决方案 2。如果你有可能在你的开发平台上安装 nodejs 或 iojs,去获取https://www.npmjs.com/package/jshint。除了第三种解决方案之外,您不仅可以做更多的事情,还可以按照http://jshint.com/docs/中的说明配置 jshintrc 文件

于 2015-06-09T08:29:59.837 回答