Браузер разбирает HTML для jQuery без загрузки ресурсов - PullRequest
5 голосов
/ 02 мая 2011

Можно ли передавать HTML в браузер через JavaScript и анализировать его с помощью jQuery, но не загружать внешние ресурсы? (сценарии, изображения, flash, все, что угодно)

Я сделаю с парсером XML, если это лучшее, что я могу сделать, но я хотел бы разрешить свободный HTML, если это возможно.

Должно быть совместимо с Chrome, Firefox, последней версией IE.

1 Ответ

1 голос
/ 02 февраля 2012
var html = someHTML; //passed in html, maybe $('textarea#id').val();? I don't understand what you mean by 'passed in html'
var container = document.createElement('div');
container.innerHTML = html;
$(container).find('img,embed,head,script,style').remove();
//or
$(container).find('[src]').remove();

var target = someTarget; //place to put parsed html
$(container).appendTo($(target));

РЕДАКТИРОВАТЬ

Протестировано работает

removeExt = function(cleanMe) {
    var toScrutinize = $(cleanMe).find('*'); //get ALL elements
    $.each(toScrutinize, function() {
      var attr = $(this)[0].attributes; //get all the attributes
      var that = $(this); 
      $.each(attr, function(){
          if ($(that).attr(this.nodeName).match(/^http/)) {//if the attribute value links externally
           $(that).remove(); //...take it out  
          } 
      })
    })
    $('script').remove(); //also take out any inline scripts
}

var html = someHTML;
var container = document.createElement('div');
container.innerHTML = html;
removeExt($(container));
var target = someTarget;
$(container).appendTo($(target));

Это будет соответствовать src, href, link, data-foo, что угодно ...ссылка внешне.http и https совпадают.встроенные скрипты убиты.Если это все еще проблема безопасности, то, возможно, это следует сделать на стороне сервера, или запутать ваш JS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...