我一直在尝试让它发挥作用,所以我希望有人能在这里提供帮助。
在 Java 中,我需要能够获取包含 JavaScript 的 HTML 页面,并检测任何 JavaScript 错误,而不需要(最好是不执行 JavaScript 代码)。
我找到了这篇文章: Javascript parser for Java
我试图弄清楚我应该如何使用 Caja 来做到这一点,但我很难找到任何包含与我正在做的事情相近的工作示例的文档。
因此,我查看了那篇文章中也引用的 Nashorn。我找到了一些示例,展示了如何从 Java 执行 JavaScript 代码,但这并不能处理整个 HTML 页面。即使如此,执行似乎也不包括验证常见 JavaScript 函数的能力(例如,它没有听说过“警报”)。
任何人都可以推荐一些可能能够实现我想要的功能,并为我指明其文档的正确方向或给我一个示例吗?
最佳答案
jshint 作为一个独立的产品似乎很适合这个:
- 它可以在 rhino 内的 java 中运行(参见 https://github.com/jshint/jshint/ )
- 存在 Nodejs 包(请参阅 https://www.npmjs.com/package/jshint )
- 它可以与 nashorn 一起使用,但非常棘手
我只会讨论第三个解决方案的技术困难,因为我最终也设法让它工作......
剧透警告:尚未检测到“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/