Dart 在不删除src属性的情况下注入图像

Dart 在不删除src属性的情况下注入图像,dart,dart-html,Dart,Dart Html,有没有一种方法可以在不过滤Dart中的src属性的情况下注入HTML(上下文中不需要安全性),我尝试过setInnerHtml,但它不允许src传递它 下面是我要添加html的分区: <div id="output"> <!--here goes messages--> </div> 这是我的飞镖代码: import 'dart:html'; import 'dart:async'; InputElement input = querySel

有没有一种方法可以在不过滤Dart中的src属性的情况下注入HTML(上下文中不需要安全性),我尝试过setInnerHtml,但它不允许src传递它

下面是我要添加html的分区:

<div id="output">
    <!--here goes messages-->

</div>

这是我的飞镖代码:

import 'dart:html';
import 'dart:async';

InputElement input = querySelector("#textInput");
var output = querySelector("#output");
var buttonSend = querySelector("#send");
var buttonImg = querySelector("#url");
var buttonVideo = querySelector("#video");

Future<Null> main() async {

  //send custom message
  buttonSend.onClick.listen((MouseEvent event) async{
    addContent(input.value);
  });

  //send img
  buttonImg.onClick.listen((MouseEvent event) async{
    addContent(getPrefabImg(input.value));
  });

  //send video
  buttonVideo.onClick.listen((MouseEvent event) async{
    addContent(getPrefabVideo(input.value));
  });
}

//if user use a prefab img
String getPrefabImg(url) {
  return "<img class='prefabImg' src='" + url + "'>";
}


//if user use a prefab video
String getPrefabVideo(url) {
  return "<iframe class='prefabVideo'' src='" + url + "' frameborder='0' allowfullscreen></iframe>";
}


//reset input and add content
void addContent(value){
  output.setInnerHtml(value + output.innerHtml);
  input.value = null;
 }
导入'dart:html';
导入“dart:async”;
InputElement输入=查询选择器(“文本输入”);
var输出=查询选择器(“输出”);
var buttonSend=querySelector(“发送”);
var buttonImg=querySelector(“url”);
var buttonVideo=querySelector(“视频”);
Future main()异步{
//发送自定义消息
buttonSend.onClick.listen((MouseeEvent事件)异步{
addContent(输入值);
});
//发送img
buttonImg.onClick.listen((MouseEvent事件)异步{
addContent(getimg(input.value));
});
//发送视频
buttonVideo.onClick.listen((MouseEvent事件)异步{
addContent(getvideo(input.value));
});
}
//如果用户使用预制img
字符串getimg(url){
返回“”;
}
//如果用户使用预制视频
字符串视频(url){

return“要创建HTML并将其注入DOM,而不使用
节点消毒器
,您需要从使用HTML
字符串
s切换到使用Dart的
节点
对象

ImageElement getPrefabImg(String url) {
  return new ImageElement(src: url)..classes.add('prefabImage');
}

void addContent(Node node) {
  output.nodes.insert(0, node);
  input.value = null;
}
但使用当前代码,您可以轻松添加
nodetreesanizizer
,就像这样

void addContent(String value) {
  output.insertAdjacentHtml(
      'afterBegin', value, treeSanitizer: NodeTreeSanitizer.trusted);
  input.value = null;
}