blob: f00984c539ce6697b5f66a27516f59cf5654a31e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
---
title: Element.setHTML()
slug: Web/API/Element/setHTML
tags:
- HTML 無害化 API
- メソッド
- Element.setHTML
- setHTML
- 実験的
browser-compat: api.Element.setHTML
translation_of: Web/API/Element/setHTML
---
{{SeeCompatTable}}{{DefaultAPISidebar("HTML Sanitizer API")}}
**`setHTML()`** は {{domxref("Element")}} インターフェイスのメソッドで、 HTML の文字列を解釈して無害化し、この要素のサブツリーとして DOM に挿入します。
信頼できない HTML の文字列を挿入するために、 {{domxref("Element.innerHTML")}} の代わりに使用してください。
解釈処理では、現在の要素のコンテキストで無効な HTML 文字列の要素を削除し、無害化処理では、安全でない、あるいは不要な要素、属性、コメントを削除します。
既定の `Sanitizer()` 設定では、{{HTMLElement("script")}} タグ、カスタム要素、コメントを含む XSS 関連の入力が取り除かれます。
無害化の設定は {{domxref("Sanitizer.Sanitizer", "Sanitizer()")}} コンストラクターのオプションを使用してカスタマイズすることができます。
> **Note:** 対象となる要素がまだない場合など、後の時点で DOM に文字列を挿入する必要がある場合は、このメソッドの代わりに {{domxref("Sanitizer.sanitizeFor()")}} を使用してください。
## 構文
```js
setHTML(input, sanitizer)
```
### 引数
- `input`
- : 無害化する HTML を定義する文字列です。
- `sanitizer`
- : {{domxref("Sanitizer")}} で、入力されたどの要素を無害化するかを定義します。
### 返値
`undefined`
### 例外
なし。
## 例
以下のコードは、 HTML の文字列を無害化して、 id が `target` である `Element` に挿入する方法を示しています。
```js
const unsanitized_string = "abc <script>alert(1)</script> def"; // 無害化前の HTML の文字列
const sanitizer = new Sanitizer(); // 既定の無害化
// id が "target" の Element を取得し、無害化された文字列を設定します。
document.getElementById("target").setHTML(unsanitized_string, sanitizer);
// 結果 (文字列): "abc def"
```
> **Note:** この例では既定の無害化を使用しています。
> {{domxref("Sanitizer/Sanitizer","Sanitizer")}} コンストラクターで無害化のオプションを構成することができます。
## 仕様書
{{Specifications}}
## ブラウザーの互換性
{{Compat}}
## 関連情報
- {{domxref("Sanitizer.sanitizeFor()")}}
- {{domxref('HTML Sanitizer API')}}
|