MeteorJS允许注入锚标签

时间:2016-02-09 01:48:31

标签: meteor javascript-injection

我有一个从数据库中读取的基本聊天。这样就可以从数据库中读取每条聊天消息。

<span>{{formatChat text}}</span>    

文本是读取的消息。 然后我使用formatChat registerHelper来检测URL。

Template.registerHelper('formatChat', function(text) {
  var urlRegex = /https?:\/\/([a-zA-Z0-9\-\.]+)(\.[a-zA-Z0-9]+)((([a-zA-Z0-9\?\=\/])+)?((\#|\?)(.+)?)?)?$/
  var urlRegexMini = /(www(\d{0,3})\.)?([a-zA-Z0-9\-\.]+)(\.(com|net|org|gov|co\.uk|edu|io\b)+)([a-zA-Z0-9\?\=\/]+((([a-zA-Z0-9\?\=\/])+)?((\#|\?)(.+)?)?)?)?$/
  finalString = "";
  //Parse every word individually
  split = text.split(' ');
  for (i = 0; i < split.length; i++) {
    finalString += " ";
    if (urlRegex.test(split[i])) {
      finalString += "<a href='" + split[i] +  "'>" + split[i] + "</a>";
    }
    else if (urlRegexMini.test(split[i])) {
      finalString += "<a href='http://" + split[i] + "'>" + split[i] + "</a>";
    }else{
      finalString += split[i];
    }
  }
  return finalString.substring(1,finalString.length);
});

问题在于meteor不允许注入,因此它会将锚标记显示为纯文本。

我想到的一个解决方案是为每个单词创建一个registerHelper,但这似乎相当愚蠢。

如何有效地绕过这条规则?

1 个答案:

答案 0 :(得分:2)

我相信应该这样做:

{{{formatChat text}}}