使用jQuery .load打破了其他库资源的链接?

时间:2008-11-19 19:18:53

标签: javascript jquery shadowbox

我有一个带div的简单html页面。我正在使用jQuery将aspx应用程序的内容加载到“content”div中。代码如下所示:

<!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源文件。我检查了firebug并且js文件在那里(没有404或任何东西)。谁知道我错过了什么?正如您所看到的,我使用了jQuery noConflict函数,因为我认为使用$可能与其他库冲突但没有帮助...

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

我猜测浏览器内置的安全措施是为了防止ajax响应运行任意脚本。

答案 2 :(得分:1)

未执行的代码是否作为脚本块呈现出来,我理解加载的库,但是当动态加载时,任何脚本块或内联javascript都不会执行。你必须提出一个解决方案来评估返回的脚本块是否有效。我会看看我是否可以从原型中挖掘一个例子,我记得他们有一个。

更新:

这直接来自原型......

  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) });
  }

当然,您可以根据需要简化该操作,但是当动态返回页面时,您必须手动评估所有脚本,因为浏览器不会自动评估注入元素的脚本。