Javascript 重新加载动态加载的脚本

Javascript 重新加载动态加载的脚本,javascript,jquery,angularjs,dom,mathjax,Javascript,Jquery,Angularjs,Dom,Mathjax,我正在通过CDN动态加载mathJax javascript库。这样我就可以将它应用于同时加载的html部分页面 目前,脚本将加载一次,但不会在html部分页面更改时重新加载。我尝试在CDN URL上使用时间戳,并从DOM中删除脚本,等等。我整个下午都在试图解决这个问题,但没有成功。没有出现错误 那么,还有什么我可以尝试让脚本与每个新的html片段一起重新加载的呢?非常感谢你的建议。这是我的密码: $scope.getLesson = function (x) { $scope.less

我正在通过CDN动态加载mathJax javascript库。这样我就可以将它应用于同时加载的html部分页面

目前,脚本将加载一次,但不会在html部分页面更改时重新加载。我尝试在CDN URL上使用时间戳,并从DOM中删除脚本,等等。我整个下午都在试图解决这个问题,但没有成功。没有出现错误

那么,还有什么我可以尝试让脚本与每个新的html片段一起重新加载的呢?非常感谢你的建议。这是我的密码:

$scope.getLesson = function (x)
{
    $scope.lessonMenu = false;
    $scope.hiddenMenuLink = true;
    x = x.replace(/[\s]/g, '');
    $scope.parse = $parse(x)($scope);                
    var i = 0;

    $.get("Lessons/" + x + ".html", function (data) {

        // send the current html to view
        $scope.currentLessonHTML = data.toString();

        // destroy mathjax if existing
        if (i > 1 && script1.parentNode != null) {
            script1.parentNode.removeChild(script1);
            script2.parentNode.removeChild(script2);
            i = 0;
        }    

        // loading the MathJax dynamically
        var head = document.getElementsByTagName("head")[0];
        var script1 = document.createElement("script");
        var script2 = document.createElement("script");
        var responsibleSibling = document.createElement("script");

        var mathJax = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" + "?nocache=" + new Date().getTime();
        var mathJaxConfig = 'MathJax.Hub.Config({extensions: ["tex2jax.js"], jax: ["input/TeX", "output/HTML-CSS"],tex2jax: {inlineMath: [ ["$","$"], ["\\\\(","\\\\)"] ],displayMath: [ ["$$","$$"], ["\\[","\\]"] ],processEscapes: true},"HTML-CSS": { availableFonts: ["TeX"] }});';
        script1.type = "text/x-mathjax-config";
        script1[(window.opera ? "innerHTML" : "text")] = mathJaxConfig;                
        head.appendChild(script1);
        script2.type = "text/javascript";
        script2.src = mathJax;
        head.appendChild(script2);
        i++;

        // apply new lesson
        $scope.showLesson = true;
        $scope.$apply();
    });
}

我终于明白了。脚本正在重新加载,但它没有应用Mathjax库特定的字体。该解决方案是一个内置函数,用于将排版排入异步操作队列,如:

Queue([“Typeset”,MathJax.Hub])


感谢您的反馈。

删除脚本标记不会同时删除相应的JavaScript对象/函数/变量。脚本标记将计算到全局对象中。所以在我看来,重新加载脚本是个坏主意。还有,为什么要重新加载脚本呢。他们的剧本没有改变。你想实现什么?@Mouser,是的,这很有道理。非常感谢。你知道是否有办法替换全局对象中的脚本,或者从对象调用它们吗?你可以动态更改全局对象(global=window)@Mouser中的每个对象。因此,按照这些思路,你认为如果我在别处加载脚本时使用ID标记,我可以通过他们的ID在我的函数中调用他们?我不太明白你的意思。如果所说的
bogus.js
加载函数
a
,您将加载同样具有函数
a
other.js
,后者将覆盖前者。因为bogus会作为
window.a
计算到window对象中。当计算other时,JavaScript会看到该窗口.a存在,并用other
a
函数覆盖它。因此,不能通过将两个函数
a
加载到具有不同ID的不同标记中来设置它们。