通过jQuery加载包含内联脚本的HTML内容

时间:2009-11-02 02:41:31

标签: asp.net jquery ajax scripting

背景

  • 我使用Graffiti CMS为本地慈善/服务组织运行一个ASP.NET站点。
  • 该组织的领导者希望开始整合第三方后端管理系统,该系统将内容公开为完整的HTML页面。
  • 其中一个页面,即官员列表,使用内联脚本加载图片或占位符(取决于是否有给定官员的图片)。
  • 我创建了一个服务器端代理,可以使用jQuery的.load() AJAX函数从这些页面加载内容。
  • 我可以使用iframe显示此内容,但感觉非常糟糕,如果内容的大小发生变化,我可能需要更改iframe的大小以确保全部显示(blech!)。

问题

如果我在Graffiti帖子中创建<div>,并使用$("#divid").load(url)加载内容,HTML内容加载正常,但内联脚本被删除,因此官员图像和显示占位符。

问题

了解问题的原因是jQuery几乎肯定试图通过在将其加载到我的DOM之前删除内联脚本来防止潜在的不良内容,是否有一种方法使用jQuery来获取此HTML并将其加载到我的DOM将保留脚本,但不会打开主要的安全漏洞?我相信我正在加载内容的系统,如果这有所不同。

连连呢?我希望尽可能简单地保持这个......任何事情都太复杂了,我也可以坚持使用iframe。

提前致谢!

@devhammer

3 个答案:

答案 0 :(得分:3)

使用document.write时出现问题。如果您能够修改源页面,则可以修改它们以使用innerHtml技术。

为此,你会改变这样的事情:

<div id="testDiv">
  <script type="text/javascript">
    document.write("<img src='image1.jpg' alt='' />");
  </script>
</div>

对此:

<div id="testDiv">
<div>
<script type="text/javascript">
  document.getElementByid('testDiv').innerHTML = "<img src='image1.jpg' alt='' />";
</script>

答案 1 :(得分:0)

尝试手动设置HTML,如下所示:

$.get(url, function(htmlText) { $('#divid').html(htmlText); });

我很确定这会执行脚本。

答案 2 :(得分:0)

对我不起作用......

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title></title>
    </head>
    <body>
        <script src="Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                var dynamic = 'begin <script type="text/javascript">alert("hello");<\/script> end';
                $('#test').html(dynamic);
            });
        </script>
        <div id="test"></div>
    </body>
</html>

警告框显示..但是如果用document.write替换它,则document.write中没有任何内容......您有“开始结束”

希望这有帮助!