Java:解析 JavaScript 并标记错误

标签 java javascript nashorn google-caja

我一直在尝试让它发挥作用,所以我希望有人能在这里提供帮助。

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

我找到了这篇文章: Javascript parser for Java

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

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

任何人都可以推荐一些可能能够实现我想要的功能,并为我指明其文档的正确方向或给我一个示例吗?

最佳答案

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

我只会讨论第三个解决方案的技术困难,因为我最终也设法让它工作......

剧透警告:尚未检测到“alert()”...解决方案 nb 2 将提供帮助...

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

目前,任何高于 v2.7.0 的版本都会失败,我个人放弃了对原型(prototype)和命名空间进行大量修补...从 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 -scripting jshint-rhino.js -- file.js

这将为您提供以下输出:

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

所以这涵盖了如何使用 nashorn 以简单的方式运行 jshint...使用第三种解决方案,至少您可以找到丢失的分号和几个典型错误。但这不是 Elixir ,对我来说也不是真正的替代方案。

我个人的偏好是仅坚持解决方案 2。如果您有可能在您的开发平台上安装nodejs或iojs,请去获取https://www.npmjs.com/package/jshint 。您不仅能够执行第三种解决方案之外的更多操作,还可以配置 jshintrc 文件,如 http://jshint.com/docs/ 中所述。

关于Java:解析 JavaScript 并标记错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30603452/

相关文章:

java - Websocket和跨域

javascript - 选择数组javascript的一部分

javascript - 从 webapps 的 firebase 读取用户数据后,在 html 标签中显示用户数据

java - 在 Java 8 Nashorn JavaScript 引擎中并发加载脚本是否有意义

Java 中嵌入的 Javascript - 如何转到声明? (Ctrl+B) (Nashorn) (IntelliJ)

java - 是什么阻止我使用我创建的对象数组?

java - 在 for 循环内部实例化 java 对象与在 for 循环外部实例化 java 对象

java用代理打开url需要很长时间

javascript - 避免 React setState() 回调循环

java - jdk.nashorn.internal.ir.annotations 不存在