如何在 React 中使用 Sanitizer API?

How to use Sanitizer API in React?

提问人:meJustAndrew 提问时间:8/18/2023 最后编辑:WingmeJustAndrew 更新时间:8/20/2023 访问量:76

问:

在将 HTML 字符串发送到后端之前,我需要对其进行清理,并且我正在尝试使用 Mozilla 文档中提到的 Sanitizer API。所以我在我的 React 项目中创建了以下方法:

sanitizeText(unsanitized_string) {
    return new Sanitizer().sanitizeFor(
        "div",
        unsanitized_string,
    ).innerHTML;
}

但这有以下编译错误:

第 94:20 行:“Sanitizer”未定义 no-undef

为什么我会收到此错误?

JavaScript ReactJS eslint 清理

评论

0赞 jmvcollaborator 8/18/2023
只是好奇,这是实验性的,据我所知,它与几乎所有浏览器(网络和移动设备)都不兼容,请参阅:developer.mozilla.org/en-US/docs/Web/API/Sanitizer/...

答:

1赞 Wing 8/18/2023 #1

问题

在撰写本文时,HTML Sanitizer API 仍处于实验阶段。问题中的错误看起来像 linting 错误 (no-undef)。我假设它来自 ESLint。ESLint 从此中获取全局变量列表。查看包的全局变量定义,HTML Sanitizer API 未显示。它似乎也没有提供缺失类型的指南(参见 TypeScript 的 DOM Lib Generator 存储库以获取类似内容),因此不确定全局变量如何进入,或者 API 是否需要支持基线。

溶液

配置 ESLint

你可以让 ESLint 知道全局变量。有几种选择:

使用配置注释

在引用全局的文件顶部,您可以添加以下内容:

/* global Sanitizer */

演示

使用配置文件

在 ESLint 的配置文件中,您可以添加以下内容:

{
  "globals": {
    "Sanitizer": true
  }
}

有关更多详细信息,请参阅文档

globals 包做贡献

您可以前往 globals 包并打开一个问题来查询有关添加新全局变量的信息。包作者可以详细说明贡献准则(例如支持基线)。如果他们对贡献持开放态度,您可以自己添加定义。

评论

0赞 meJustAndrew 8/21/2023
即使我没有更改任何内容,我也不会再收到此错误。而且我没有看到它被添加到全局 json 中。我仍然会接受这个答案,因为它清除了错误背后的原因,而且信息量很大。由于缺乏支持,我现在也放弃了 Sanitizer 的使用。非常感谢你的帮助,Wing!