如何在JavaScript代码中包含HTML标签时使JSHint发出警告

How to make JSHint warn when HTML tags are included in JavaScript code?

本文关键字:JSHint 警告 标签 HTML JavaScript 代码 包含      更新时间:2023-09-26

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

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

我想配置JSHint,当它在.js文件中找到HTML标记时抛出警告。

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

编辑:

只是为了清楚,我试图捕获这样的代码:

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

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

第二个编辑:

如果Jenkins的post-build插件可以抛出验证错误,如果在.js文件中发现HTML,那么这也是一个很好的替代解决方案。

答案

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

我的猜测(因为我不是内部人士)关于为什么

你提出的解决方案(在任何场景中禁止任何HTML标签)将禁止各种高度有效的用例,无论你对在js中创建HTML有何看法。我理解这是您的团队想要做的事情,但是这样一个生硬的规则将不具有jshint其他规则的一般适用性。他们的重点是加强风格规则。因为你不允许在字符串中使用所有的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);