重新加载动态加载的脚本

时间:2015-08-03 00:25:01

标签: javascript jquery angularjs dom mathjax

我正在动态加载他们的CDN上的mathJax javascript库their CDN dynamically。这样我就可以将它应用到我同时加载的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();
    });
}

1 个答案:

答案 0 :(得分:1)

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

MathJax.Hub.Queue(["排版",MathJax.Hub]);

http://docs.mathjax.org/en/latest/typeset.html

感谢您的反馈。