appendHtml() 没有附加完整的 HTML - Dart
appendHtml() doesn't append the full HTML - Dart
以下代码在 DartPad 中按预期工作,如下所示:
void main() {
Element e = querySelector('table');
String someValue = 'hello, world';
int anotherValue = 23958;
Element row = new Element.tr()
..appendHtml('''
<td>$someValue</td>
<td>$anotherValue</td>
''');
e.append(row);
}
但是,当我在同一页面上使用 dart2js (dart2js -c -o app.js app.dart
) 和 运行 编译相同的代码时,创建的 <td>
被完全删除,我结束了最多:
<table>
<tr>hello, world 23958</tr>
</table>
当实际的 .dart 文件在 <script src="...">
中与 Dartium (v39.0.2171.0 x64) 一起使用时,也会出现同样的问题。我正在使用 Dart v1.11.1.
一些测试:
..appendHtml('''
<td></td>
<td>hi</td>
''');
产量:
<table>
<tr>hi</tr>
</table>
这与上面相同:
..appendHtml('<td>hi</td>');
唯一能让我得到我想要的东西的方法是:
..append(new Element.td()..text = someValue)
..append(new Element.td()..text = anotherValue.toString());
这是因为JS不支持多行字符串,需要这样构造:
'<td>TEXT</td>' +
'<td>TEXT2</td>'
或:
'<td>TEXT</td><td>TEXT2</td>'
Dart 1.11 对附加HTML 进行了更改以清理 HTML 输入。
为避免这种情况,您可以传递一种无作用的消毒剂。
class MySanitizer implements NodeTreeSanitizer {
void sanitizeTree(Node node) {}
}
document.body.appendHtml('<td>fish</td>', treeSanitizer: new MySanitizer());
这是一个错误。应该很快修复在前沿,修复正在审查中。基本上,清理会创建要清理的文档片段。它没有正确使用上下文,所以它试图创建它,因为它在主体下,并且 table 元素在那里不起作用。
以下代码在 DartPad 中按预期工作,如下所示:
void main() {
Element e = querySelector('table');
String someValue = 'hello, world';
int anotherValue = 23958;
Element row = new Element.tr()
..appendHtml('''
<td>$someValue</td>
<td>$anotherValue</td>
''');
e.append(row);
}
但是,当我在同一页面上使用 dart2js (dart2js -c -o app.js app.dart
) 和 运行 编译相同的代码时,创建的 <td>
被完全删除,我结束了最多:
<table>
<tr>hello, world 23958</tr>
</table>
当实际的 .dart 文件在 <script src="...">
中与 Dartium (v39.0.2171.0 x64) 一起使用时,也会出现同样的问题。我正在使用 Dart v1.11.1.
一些测试:
..appendHtml('''
<td></td>
<td>hi</td>
''');
产量:
<table>
<tr>hi</tr>
</table>
这与上面相同:
..appendHtml('<td>hi</td>');
唯一能让我得到我想要的东西的方法是:
..append(new Element.td()..text = someValue)
..append(new Element.td()..text = anotherValue.toString());
这是因为JS不支持多行字符串,需要这样构造:
'<td>TEXT</td>' +
'<td>TEXT2</td>'
或:
'<td>TEXT</td><td>TEXT2</td>'
Dart 1.11 对附加HTML 进行了更改以清理 HTML 输入。
为避免这种情况,您可以传递一种无作用的消毒剂。
class MySanitizer implements NodeTreeSanitizer {
void sanitizeTree(Node node) {}
}
document.body.appendHtml('<td>fish</td>', treeSanitizer: new MySanitizer());
这是一个错误。应该很快修复在前沿,修复正在审查中。基本上,清理会创建要清理的文档片段。它没有正确使用上下文,所以它试图创建它,因为它在主体下,并且 table 元素在那里不起作用。