在通过AJAX加载的DOM中运行动态注入的javascript(尝试使用历史记录ajax化网站.js)

Run dynamically injected javascript in DOM loaded via AJAX (attempting to ajaxify website with history.js)

本文关键字:历史 记录 ajax js 网站 javascript 加载 AJAX DOM 注入 动态      更新时间:2023-09-26

我有一个Web应用程序,它基本上具有页眉,页脚和正文视图。我正在使用history.js库和HTML5 pushstate对网站进行ajaxization,但是我遇到的问题之一是在将javascript插入DOM时运行嵌入式javascript。

几乎所有的javascript都包装在jQuery(function(){ ... })(文档就绪加载器)中

有谁知道处理这个问题的好策略?谢谢!

如果我理解你,你的"页面"只是你动态加载的HTML的容器。在该 HTML 中,您有当前未执行的 JavaScript 脚本块。这是对的吗?它们是在页面脚本中还是指向新脚本文件的链接中?

无论如何,我认为这回答了你的问题:你如何执行动态加载的JavaScript块?

我自己的想法:

除非你的容器是非常通用的,所以不知道你可能需要什么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);
})();

使用 .on,我不打算解释该函数的行为,但用几句话:

通过 DOM 上的冒泡元素工作,例如,您将"onclick"绑定到一个div,您可以设置为他的部分或全部孩子有 X 行为