Iroin-ajax response with html tags [duplicate]

无人久伴 提交于 2019-12-11 06:09:01

问题


I'm getting a JSON feed by iron-ajax, in the returned JSON come with HTML tags like this.

[{
pk :1,
body: "<p>ثم سكان بشرية الأبرياء عدد, كلّ يقوم الطرفين و. وبدأت انذار عل بحق, تكبّد إستيلاء الأثناء، دنو بـ, عالمية العالم، بالمطالبة قد الى. وزارة السبب التّحول فصل بل, كل والتي واشتدّت وايرلندا بعض. إحتار واندونيسيا، بلا لم, بوابة الفترة بين بل.
</p> <p>ثم سكان بشرية الأبرياء عدد, كلّ يقوم الطرفين و. وبدأت انذار عل بحق, تكبّد إستيلاء الأثناء، دنو بـ, عالمية العالم، بالمطالبة قد الى. وزارة السبب التّحول فصل بل, كل والتي واشتدّت وايرلندا بعض. إحتار واندونيسيا، بلا لم, بوابة الفترة بين بل.".</p> <p>ثم سكان بشرية الأبرياء عدد, كلّ يقوم الطرفين و. وبدأت انذار عل بحق, تكبّد إستيلاء الأثناء، دنو بـ, عالمية العالم، بالمطالبة قد الى. وزارة السبب التّحول فصل بل, كل والتي واشتدّت وايرلندا بعض. إحتار واندونيسيا، بلا لم, "بوابة" الفترة بين بل.</p> <!-- Images Box --><div class="img_box01">            <img class="img-responsive" src="url" alt=""><p>عبد المالك نبيل بوتيجان</p>            </div>  <!-- Video --><div class="box video_box"><div class="head"><h2></h2></div> <p>وأدرج بوتيجان على قائمة التطرف منذ 29 حزيران/يونيو لمحاولته التوجه إلى سوريا مرورا بتركيا، بحسب مصدر قريب من التحقيق.<br /> كما أن المنفذ الثاني يشبه إلى حد كبير مشتبها به تبحث عنه السلطات منذ 22 تموز/يوليو أي قبل ثلاثة أيام من الاعتداء الذي تم في كنيسة سانت اتيان دو روفريه بالقرب من روان (شمال غرب).</p> <p>وكان جهاز أجنبي أبلغ هيئة تنسيق مكافحة الإرهاب بوجود رجل لم تعرف هويته "مستعد للمشاركة في اعتداء على الأراضي الفرنسية"، وأرفقت بالبلاغ صورة لشخص يشبه كثيرا عبد المالك بوتيجان.</p>   <!-- Images Box --><div class="img_box01">            <img class="img-responsive" src="url" alt=""><p>عبد المالك نبيل بوتيجان</p>            </div>  <!-- Video --><div class="box video_box"><div class="head"><h2></h2></div><div class="content"><div class="arena"><video id="url" dir="ltr" class="video-js vjs-big-play-centered vjs-default-skin" controls preload="auto" width="600" height="338" poster=""><source src="url" type="video/mp4"></source><track kind="captions" src="" srclang="en" label="English"><track kind="captions" src="" srclang="ar" label="Arabic" default><p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading your web browser</p></track></track></video></div></div><div class="foot"></div></div>",
}]

so I create a dom-repeat element to show the results , but when printing the [[body]] , it prints out as text with the HTML tags as text also, so how to print it out as HTML without facing XSS security .


回答1:


I think you have to insert the HTML imperatively with DOM API (innerHTML).

Here's an example in which I extend <div> to display arbitrary HTML.

Polymer({
  is: 'my-elem',
  
  properties: {
    ajaxResponse: {
      type: Array,
      value: [{
         pk :1,
         body: "<b>some html</b>"
      }]
    }
  }
});

Polymer({
  is: 'my-div',
  extends: 'div',
  
  properties: {
    html: {
      type: String,
      observer: '_renderHTML'
    }
  },
  
  _renderHTML: function(html) {
    this.innerHTML = html;
  }
});
<!DOCTYPE html>
<html>
<head>
  <base href="https://polygit.org/components/">
  <script src="webcomponentsjs/webcomponents-lite.min.js"></script>
  <script>
    Polymer = {
      dom: 'shadow'
    }
  </script>
  <link href="polymer/polymer.html" rel="import"/>
</head>

<body>  
  
  <my-elem></my-elem>
  
  <dom-module id="my-elem">
    <template>
      <template id="repeater" is="dom-repeat" items="[[ajaxResponse]]">
        <div is="my-div" html="[[item.body]]"></div>
      </template>
    </template>
  </dom-module>

</body>
</html>

Note though that it is a possible security threat. You could however sanitize the input HTML inside the <my-div> element. For example by using sanitize-html



来源:https://stackoverflow.com/questions/38636107/iroin-ajax-response-with-html-tags

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!