3

在我们的开发商店中,我们使用客户端模板并且在我们的 JavaScript 代码中不包含任何 HTML 标记。

在我们的持续集成过程中,我们在每次提交(Jenkins 中的构建后操作)后自动运行 JSHint,以验证是否符合我们的编码风格指南。

我想配置 JSHint,这样当它在 .js 文件中找到 HTML 标记时会引发警告。

我怎样才能做到这一点?我已经搜索过了,但我找不到 HTML 标记警告的示例,也找不到 JSHint 的自定义规则。

编辑:

为了清楚起见,我试图捕捉这样的代码:

var newDiv = "<div>Hello World!</div>";
$("body").append(newDiv);

如果我能让 JSHint 为上面示例中的第一行生成警告,那就太好了。

第二次编辑:

如果 Jenkins 有构建后插件,如果在 .js 文件中找到 HTML,可能会引发验证错误,那么这也是一个很好的替代解决方案。

4

1 回答 1

1

答案

不,jSHint 不支持在字符串中禁止任意字符串内容或 HTML 标记。它目前也不支持自定义规则,尽管作者已经讨论过将来添加公共 api。

我对 WHY 的猜测(因为我不是内部人员)

您提出的解决方案(在任何情况下都不允许任何 HTML 标记)将不允许各种高度有效的用例,无论您对在 js 中创建 HTML 有什么看法。我知道这是您的团队想要做的,但是这样一个生硬的规则不会具有其余 jsHints 规则的普遍适用性。他们的重点是执行风格规则。由于您不允许字符串中的所有 HTML 标记,这实际上更像是一种内容验证,而不是一种样式验证。它将消除以下与 DOM 注入/关注点分离无关的内容示例。

例如:

var example="I'm writing a report on <div> tags and css";

或者

var htmlStrippedText = text.replace("<div>","");

我的建议

当然,缺乏广泛的适用性并不是你不这样做的理由。如果您真的想过滤这样的内容,请使用命令行脚本使用正则表达式进行搜索。由于您只想查看是否存在 HTML,而不是其是否有效,因此您可以只搜索表单中的内容,<[div|span|body|html...并且document.createElement应该没问题(尽管如果您想在其中允许它,您可能必须更有创意注释)。只是不要使用 nodejs 来运行带有 JS 的脚本,否则它将无法验证自身。:)

当然,这一切都不会阻止坚定的开发人员:

var topSecretDOMObject,topSecretFunction,topSecretArgument;
topSecretFunction = "create"+"Element";
topSecretArgument = "d" + "i" + "v";
topSecretDOMObject = document[topSecretFunction](topSecretArgument);
于 2013-04-22T20:56:33.387 回答