Javascript 重新加载动态加载的脚本
我正在通过CDN动态加载mathJax javascript库。这样我就可以将它应用于同时加载的html部分页面 目前,脚本将加载一次,但不会在html部分页面更改时重新加载。我尝试在CDN URL上使用时间戳,并从DOM中删除脚本,等等。我整个下午都在试图解决这个问题,但没有成功。没有出现错误 那么,还有什么我可以尝试让脚本与每个新的html片段一起重新加载的呢?非常感谢你的建议。这是我的密码: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
$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存在,并用othera
函数覆盖它。因此,不能通过将两个函数a
加载到具有不同ID的不同标记中来设置它们。