Вставить MvcHtmlString, содержащий <script> с Javascript
Следующий метод встраивания некоторых Html
из string
в <div>
с Javascript (используя некоторые JQuery) работает:
var div = $('#someId');
var testHtml = '<script></script><div>dummy Content</div>';
div.html(testHtml);
HTML-код внедряется и отображается в div. Если я положу некоторые alert('Test')
заявление в <script>
теги, предупреждение будет отображаться.
Что также работает, это:
<div id="someId">@MvcHtmlString.Create("<script></script><div>dummy Content</div>")</div>
Однако мне нужно пройти MvcHtmlString
к функции JavaScript, а затем вставьте эту строку с JavaScript.
Это работает, если в строке нет кода javascript:
var div = $('#someId');
var inputItem = '@MvcHtmlString.Create("<div>dummy Content</div>")';
div.html(inputItem);
Однако, если в строке есть содержимое javascript, <script>
-part не внедряется, и контент не отображается должным образом.
Так что это не работает должным образом:
var div = $('#someId');
var inputItem = '@MvcHtmlString.Create("<script></script><div>dummy Content</div>")';
div.html(inputItem);
Может кто-нибудь объяснить, почему это не работает? Есть ли простой трюк с этим?
3 ответа
Я не знаю, в каком браузере вы тестировали (я тестировал в IE8 и Chrome22), но ваш оригинальный пример также не работает:
var div = $('#someId');
var testHtml = '<script></script><div>dummy Content</div>';
div.html(testHtml);
Проверь это JSFiddle
Потому что вы не можете иметь "</script>"
внутри строки JS, потому что браузеры интерпретируют его как закрывающий <script>
тег. Посмотрите этот вопрос: тег Script в строке JavaScript
Так что решение для вас одинаково, поэтому не </script>
внутри строки:
<script type="text/javascript">
var div = $('#someId');
var testHtml = '@MvcHtmlString.Create("<script>alert(\"test\");</sc' + 'ript><div>dummy Content</div>")';
div.html(testHtml);
</script>
Вы также можете проверить это в действии в этом JSFiddle
,
MvcHtmlString.Create
Метод создает кодированный HTML-код и удаляет теги HTML-сценария.
использование @Html.Raw("htmlstring")
чтобы дать вам необработанное значение HTML строки, не удаляя теги.
var div = $('#someId');
var inputItem = '@Html.Raw("<script></script><div>dummy Content</div>")';
div.html(inputItem);
Добавление поддельного типа атрибута в тег сценария, отличный от экранированного содержимого " text/javascript". Пример:
var inputItem = '@MvcHtmlString.Create("<script type="text"></script><div>dummy Content</div>")';
Удалите позже этот атрибут может сделать трюк. Но так как я понятия не имею, как работает MvcHtmlString, я действительно не уверен, что это может быть решением здесь.