2012-05-23 19 views
5

我有一个基本上具有页眉,页脚和正文视图的Web应用程序。我正在使用history.js库和HTML5 pushstate来对网站进行Ajax化,但是我遇到的问题之一是将JavaScript插入DOM时运行嵌入式JavaScript。在通过AJAX加载的DOM中运行动态注入的javascript(尝试使用history.js加载AJAX)

差不多我所有的JavaScript被包裹在jQuery的(函数(){...})(文件在准备装载)

有谁知道处理一个很好的策略?谢谢!

回答

7

如果我理解你,你的“页面”只是你动态加载的HTML容器。在该HTML中,您拥有目前不执行的JavaScript脚本块。那是对的吗?他们是否在页面脚本或链接到新的脚本文件?

在任何情况下,我觉得这回答了你的问题:How do you execute a dynamically loaded JavaScript block?

我自己的想法:

除非你的容器是非常通用的,所以无法知道的JavaScript你可能需要,最简单的方法可能是只需手动将所有JavaScript添加到容器页面,以便将其加载到容器中,也许将其缩小并连接到单个文件中。

如果您需要动态加载脚本,但您知道它们是什么,那么可以使用.getScript()或.ajax()来使用jQuery。我认为这个页面拼写很好,http://www.electrictoolbox.com/jquery-dynamically-load-javascript-file/。同样,如果在抓取HTML块之前,您不知道需要哪些脚本,则可能会解析脚本链接的html,并通过添加到页面中的新脚本元素手动附加它们。作为一个例子,下面的脚本将jQuery添加到页面中(如果它尚不存在)。

(function() { 

    if (typeof(jQuery) == "undefined") { 
     var headID = document.getElementsByTagName("head")[0];   
     var newScript = document.createElement('script'); 
     newScript.type = 'text/javascript'; 
     newScript.id = 'myjQuery'; 
     newScript.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js'; 
     headID.appendChild(newScript); 
    } 

    window.addEventListener('load', function (e) { 

     //make jQuery calls here. 

    }, false); 

})(); 
+0

我想我只是找到了一个很好的答案: http://api.jquery.com/jQuery.ajax/ 的dataType配置属性: “” HTML” :将HTML作为纯文本返回;包含的脚本标记在ins时进行评估在DOM中进行。“ 我会尝试一下,但这听起来就像我需要:) –

+0

这听起来不错,很容易。祝你好运! – jatrim

-1

使用.on,我也不打算解释人该功能,但在几句话的行为:

通过对DOM发泡部件例如您绑定“onclick”事件到一个div您

工作可以设置一些或所有他的孩子有x性质