Мне нужно принять произвольный пользовательский ввод.Позже я хочу скопировать этот ввод, уже экранированный в объекты HTML, в текстовое поле, чтобы его можно было редактировать.Однако функция jQuery jQuery.html()
считывает сущности HTML, как если бы они были настоящим HTML, и внедряет пользовательский сценарий непосредственно в страницу.Мне нужно захватить содержимое пользовательского ввода, даже если оно содержит <script>
теги, и вывести его в текстовую область, где его можно редактировать.
Итак, мне нужно это:
<textarea name="empty"></textarea>
<div name="user-input"> <script> window.alert('hi'); </script> </div>
, чтобы стать этим:
<textarea name="empty"> <script> window.alert('hi'); </script> </textarea>
<div name="user-input"> <script> window.alert('hi'); </script> </div>
на триггере JavaScript.Вместо этого текстовое поле становится:
<textarea name="empty"> <script> window.alert('hi'); </script> </textarea>
с отображением пустого текстового поля и введением JavaScript-кода пользователя на страницу.
Прямо сейчас я получаю содержимое пользовательского ввода и помещаю его втекстовое поле выглядит так:
$('#edit-textarea').html(($('#user-input').text()));
Я пробовал несколько вариантов этого, но безрезультатно.
Пожалуйста, см. http://jsfiddle.net/vkRkt/8 для теста.
РЕДАКТИРОВАТЬ:
См. Обсуждение ниже.Решением в моем случае было использование jquery.val()
вместо jquery.html()
.Я пропустил val, потому что у меня сложилось впечатление, что это псевдоним для jquery.attr('value', new_value)
, который имеет свои проблемы с инъекцией (может быть остановлен с помощью "). val()
не совпадает с attr('value', val)
и в моих кратких испытаниях кажется безопасным от попыток инъекции.
Если кто-то столкнется с этим позже и узнает, что val
на самом деле не безопасный способ сделать это, пожалуйста, ответьте и обновите нас немедленно.
Спасибо.