3

私たちの開発ショップでは、クライアント側のテンプレートを使用し、JavaScript コードに HTML タグを含めません。

当社の継続的インテグレーション プロセスでは、すべてのコミット (Jenkins でのビルド後のアクション) の後に JSHint を自動的に実行して、コーディング スタイル ガイドラインへの準拠を確認します。

.js ファイルで HTML タグを見つけたときに警告をスローするように JSHint を構成したいと思います。

どうすればこれを達成できますか? 検索しましたが、HTML タグの警告の例も、JSHint のカスタム ルールも見つかりません。

編集:

明確にするために、次のようなコードをキャッチしようとしています。

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

上記の例の最初の行で JSHint に警告を生成させることができれば、それは素晴らしいことです。

2 番目の編集:

.js ファイルで HTML が見つかった場合に検証エラーをスローする Jenkins のビルド後のプラグインがある場合、それも優れた代替ソリューションになります。

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が有効かどうかではなく、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 に答える