2008-11-19 72 views
1

我有一个div的简单的HTML页面。我正在使用jQuery将aspx应用程序的内容加载到“内容”div中。代码如下所示:使用jQuery .load将链接断开与其他库资源的链接?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
       "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"> 
    </script> 
    <script type="text/javascript"> 
     jQuery.noConflict(); 
    </script> 
</head> 
<body> 
    <div id="content"> 
     <div id="loading"> 
      <div class="loading-indicator">Loading...</div> 
     </div> 
    </div> 
</body> 
<script type="text/javascript"> 
    jQuery(document).ready(function() { 
     jQuery("#content").load("default.aspx"); 
    }); 
</script> 
</html> 

问题是default.aspx使用shadowbox和其他javascript库。当代码尝试在default.aspx上执行时,它的行为就像js源文件未加载。我检查萤火虫和js档案在那里(没有404或任何东西)。任何人都知道我错过了什么?正如你可以看到我使用jQuery的noConflict函数,因为我认为使用$可能是相互冲突与其他图书馆,但没有帮助有...

回答

1

是不执行呈现出的脚本块的代码,我明白装的库,但任何脚本块或内嵌动态加载像JavaScript时将不会执行。你必须拿出一个解决方案来评估返回的脚本块是否有效。我会看看如果我能从原型中挖掘出一个例子,我记得他们有一个例子。

UPDATE:

这是直接从原型...

ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>' 

    extractScripts: function() { 
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); 
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); 
    return (this.match(matchAll) || []).map(function(scriptTag) { 
     return (scriptTag.match(matchOne) || ['', ''])[1]; 
    }); 
    } 

    evalScripts: function() { 
    return this.extractScripts().map(function(script) { return eval(script) }); 
    } 

当然,你可以简化您的需求,但是当动态返回一个页面,你必须手动评估所有脚本,浏览器不会评估自动注入元素的脚本。

1

似乎是一个常见的问题:http://andreineculau.wordpress.com/2006/09/29/ajax-ondemand-javascript-or-dynamic-script-tags/

我猜它内置在浏览器中的安全性可防止运行任意脚本的ajax响应。

+0

我不认为这是一个安全功能。该过程是(1)通过ajax读取一个字符串。 (2)将字符串转换为DOM元素。 (3)将这些插入到文档中。 “正在运行的任意脚本”出现在步骤(3)中。该字符串在步骤(1)后不再是“ajax响应”。 – 2008-11-19 21:02:46

2

我有代码这样做,它可能比需要更详细,但嵌套的js文件不应该是一个问题。

jQuery.get('default.aspx', null, function(data) { 
    $('#default').append(data); 
}, 'html');