通过jQuery加载包含内联脚本的HTML内容 背景 我为当地的慈善/服务组织运行了一个使用涂鸦CMS的ASP.NET网站 该组织的领导人希望开始集成第三方后端管理系统,该系统将内容公开为完整的HTML页面 其中一个页面“官员列表”使用内联脚本加载图片或占位符(取决于给定官员是否有图片) 我创建了一个服务器端代理,可以使用jQuery的.load()AJAX函数从这些页面加载内容 我可以使用iframe很好地显示此内容,但这感觉非常笨拙,如果内容的大小发生变化,我可能需要更改iframe的大小以确保所有内容都显示出来(哎哟!) 问题

通过jQuery加载包含内联脚本的HTML内容 背景 我为当地的慈善/服务组织运行了一个使用涂鸦CMS的ASP.NET网站 该组织的领导人希望开始集成第三方后端管理系统,该系统将内容公开为完整的HTML页面 其中一个页面“官员列表”使用内联脚本加载图片或占位符(取决于给定官员是否有图片) 我创建了一个服务器端代理,可以使用jQuery的.load()AJAX函数从这些页面加载内容 我可以使用iframe很好地显示此内容,但这感觉非常笨拙,如果内容的大小发生变化,我可能需要更改iframe的大小以确保所有内容都显示出来(哎哟!) 问题,asp.net,jquery,ajax,scripting,Asp.net,Jquery,Ajax,Scripting,如果我在涂鸦帖子中创建一个,并使用$(“#divid”).load(url)加载内容,HTML内容加载良好,但内联脚本被剥离,因此不会显示官员图像或占位符 问题 理解问题的原因是,jQuery几乎肯定是在试图通过在我将内联脚本加载到DOM之前删除它来防止潜在的坏东西,有没有一种方法可以使用jQuery获取此HTML并将其加载到我的DOM中,从而保留脚本,但不打开主要的安全漏洞?我确实信任加载内容的系统,如果这有什么不同的话 建议?我希望尽可能地保持这个简单…任何太复杂的事情,我都可以坚持使用if

如果我在涂鸦帖子中创建一个
,并使用
$(“#divid”).load(url)
加载内容,HTML内容加载良好,但内联脚本被剥离,因此不会显示官员图像或占位符

问题 理解问题的原因是,jQuery几乎肯定是在试图通过在我将内联脚本加载到DOM之前删除它来防止潜在的坏东西,有没有一种方法可以使用jQuery获取此HTML并将其加载到我的DOM中,从而保留脚本,但不打开主要的安全漏洞?我确实信任加载内容的系统,如果这有什么不同的话

建议?我希望尽可能地保持这个简单…任何太复杂的事情,我都可以坚持使用iframe

提前谢谢


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

$.get(url, function(htmlText) { $('#divid').html(htmlText); });
<div id="testDiv">
  <script type="text/javascript">
    document.write("<img src='image1.jpg' alt='' />");
  </script>
</div>

我很确定这将执行脚本。

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

为此,您需要更改如下内容:

$.get(url, function(htmlText) { $('#divid').html(htmlText); });
<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>

document.getElementByid('testDiv').innerHTML=“”;
对我不起作用

<!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>

$(文档).ready(函数(){
var dynamic='begin alert(“hello”);end';
$('#test').html(动态);
});
警报框正在显示。。但是,如果将其替换为
document.write
,则document.write中不会出现任何内容。。。你有“开始-结束”


希望这有帮助

您试图从中加载的页面是否位于同一域名上?内联脚本的意思是
script
tags或onclick=someScript?不,页面位于不同的域中,但我在我的域上设置了服务器端代理以将内容拉过来。内联方式如下:
if('=''){document.write(';}else{document write('');}脚本出现在标记的中间。注意,有些页面加载时间脚本可能希望能够完成页面加载后无法完成的操作。主要是:任何调用
document.write
在页面加载时向页面添加内容的操作都会完全破坏现有页面。有趣的是,您应该提到
document.write,因为这些脚本正是这么做的。我确实尝试了
$。get
,可以获取要加载的内容(和脚本),但脚本不会执行。当以这种方式加载HTML时,如何使用jQuery获取所需的HTML部分?.load删除[html][body]等,但现在需要手动完成此操作。。。有什么想法吗?@BerggreenDK:
$('someSelector',htmlText.html()
@SLaks:Ehm,是的-我可以说得更具体一些。但我指的是我们如何获得内联脚本,然后在HTML中执行脚本的问题?对……很有意义。脚本在那里,但是
document.write
不起作用,因为调用它太晚了。是的“document.write命令必须在加载页面的过程中执行。”-您可以将您的帖子标记为已回答:)我可以问运行系统的人这些页面所在的位置是否可以修改页面,但是考虑到还有很多其他人使用相同的系统,我会很惊讶他是否愿意接受。重复使用不是为重复使用而设计的系统的一些危险的主要例子。