首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Javascript嵌入包含<script>的MvcHtmlString

用Javascript嵌入包含<script>的MvcHtmlString
EN

Stack Overflow用户
提问于 2012-10-23 00:44:44
回答 3查看 3.4K关注 0票数 1

下面的方法使用Javascript (使用一些JQuery)将string中的一些Html嵌入到<div>中:

代码语言:javascript
复制
var div = $('#someId');
var testHtml = '<script></script><div>dummy Content</div>';
div.html(testHtml);

Html代码被嵌入并显示在div中。如果我在<script>标记中添加一些alert('Test')-statement,警报就会出现。

同样有效的是:

代码语言:javascript
复制
<div id="someId">@MvcHtmlString.Create("<script></script><div>dummy Content</div>")</div>

但是,我需要将MvcHtmlString传递给javascript函数,然后将此字符串与javascript一起嵌入。

如果字符串中没有javascript代码,则可以执行此操作:

代码语言:javascript
复制
var div = $('#someId');
var inputItem = '@MvcHtmlString.Create("<div>dummy Content</div>")';
div.html(inputItem);

但是,如果字符串中包含javascript内容,则不会嵌入<script>-part,并且无法正确显示内容。

所以这不能正常工作:

代码语言:javascript
复制
var div = $('#someId');
var inputItem = '@MvcHtmlString.Create("<script></script><div>dummy Content</div>")';
div.html(inputItem);

有人能解释一下为什么这个不起作用吗?有什么简单的窍门吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-23 01:13:11

我不知道您在哪个浏览器上测试过(我在IE8和Chrome22中测试过),但您最初的示例也不起作用:

代码语言:javascript
复制
var div = $('#someId');
var testHtml = '<script></script><div>dummy Content</div>';
div.html(testHtml);

检查此JSFiddle

因为您不能在JS字符串中包含"</script>",因为浏览器将其解释为结束<script>标记。请看这个SO问题:Script tag in JavaScript string

所以解决方案对你来说是一样的,所以不要在字符串中直接使用</script>

代码语言:javascript
复制
<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中检查这一点。

票数 2
EN

Stack Overflow用户

发布于 2012-10-23 00:52:56

向脚本标记添加假属性类型,而不是“text/javascript”转义内容。例如:

代码语言:javascript
复制
var inputItem = '@MvcHtmlString.Create("<script type="text"></script><div>dummy Content</div>")';

稍后删除此属性可以实现此目的。但由于我不知道MvcHtmlString是如何工作的,我真的不确定它是不是一个解决方案。

票数 0
EN

Stack Overflow用户

发布于 2012-10-23 00:54:00

MvcHtmlString.Create方法创建经过编码的超文本标记语言并剥离超文本标记语言脚本标记。

使用@Html.Raw("htmlstring")为您提供字符串的原始HTML值,而不剥离标记。

代码语言:javascript
复制
var div = $('#someId');
var inputItem = '@Html.Raw("<script></script><div>dummy Content</div>")';
div.html(inputItem);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13015930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档