загрузить Mathjax после загрузки javascript

вот мой простой код HTML

<html>
<head>
<script type="text/javascript"
 src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
<script>
function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}
</script>
</head>
<body>
<p>This is the line that load correct  \[ \frac{x+y}{z} \]</p>
<p id="step1"></p>
<script>
var x = gup('x');
var y = gup('y');
var z = gup('z');
var text = "This is the line that NOT show correct" + "\[ \frac{" + x + " + " + y + "}{" + z +"}\]";
document.getElementById("step1").innerHTML= text;
</script>
</body>
</html>

когда я загружаю этот html-файл и отправляю параметры по URL-адресу, например

sample.html?x=1&y=2&z=3

первое предложение показывает правильную форму и загрузку Mathjax, но второе предложение НЕТ. это потому, что Mathjax загружается перед кодом java-скрипта. Вы знаете, как загрузить Mathjax после Javascript?


person nfarshchi    schedule 27.09.2012    source источник
comment
Примечание из будущего: срок службы cdn.mathjax.org подходит к концу, проверьте mathjax. org/cdn-shutting-down для получения советов по миграции (и, возможно, обновите свой пост для будущих читателей).   -  person Peter Krautzberger    schedule 21.04.2017


Ответы (2)


Вы можете попробовать использовать загрузчик JavaScript с обратным вызовом, чтобы загрузить MathJax и запустить свой код в обратном вызове. См., например, https://github.com/niftylettuce/javascript-async-callback.

РЕДАКТИРОВАТЬ:

<html>
<head>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script>
function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}
</script>

<script>
$(function() {
  var x = gup('x');
  var y = gup('y');
  var z = gup('z');
  var text = "This is the line that NOT show correct <-- It's OK now" + "\\[ \\frac{" + x + " + " + y + "}{" + z +"} \\]";
  document.getElementById("step1").innerHTML= text;
});
</script

</head>
<body>
<p>This is the line that load correct  \[ \frac{x+y}{z} \]</p>
<p id="step1"></p>
</body>
</html>
person alexandernst    schedule 27.09.2012
comment
Кто именно не работал? Может быть, это выдает какую-то ошибку? Пожалуйста, вставьте код, который вы написали, чтобы протестировать его. - person alexandernst; 27.09.2012
comment
Я добавил эту строку в заголовок ‹script src=//raw.github.com/niftylettuce/javascript-async-callback/master/async.min.js›‹/script› и после части тела javascript я добавил ‹script› (function liveDemo() { var src = '//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js' function callback() { alert('Это работает!') } _async. load(document, src, callback) }()) ‹/script›, но он даже не показывает мне предупреждение, я вставил его не в то место? - person nfarshchi; 27.09.2012
comment
Вы должны использовать библиотеку, которая у меня есть, но писать свой собственный код, а не просто копировать/вставлять демо :s . В любом случае, я только что проверил ваш код, и он работает правильно. В чем проблема? Потому что я могу видеть все переменные, которые анализируются из местоположения. - person alexandernst; 27.09.2012
comment
да, переменные находятся на месте, это не моя проблема, после их вставки я должен повторно запустить mathjax, чтобы показать их в виде формулы. поскольку mathjax запускается до java, переменные не будут отображаться должным образом - person nfarshchi; 27.09.2012
comment
извините за копирование и вставку демо, но если бы демо вообще работало, я мог бы увидеть предупреждение, и после этого я должен смешать его со своим кодом. я прав? - person nfarshchi; 27.09.2012
comment
Примечание из будущего: срок службы cdn.mathjax.org подходит к концу, проверьте mathjax. org/cdn-shutting-down для получения советов по миграции (и, возможно, обновите свой пост для будущих читателей). - person Peter Krautzberger; 21.04.2017

Если вы модифицируете документ, чтобы добавить математику после запуска MathJax, вам нужно указать MathJax запуститься снова. Вы делаете это, используя

<script>
  MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
</script>

Подробнее см. в соответствующей документации по MathJax.

В вашем случае это должно сделать это:

<script>
var x = gup('x');
var y = gup('y');
var z = gup('z');
var text = "This is the line that NOT show correct" + "\[ \frac{" + x + " + " + y + "}{" + z +"}\]";
document.getElementById("step1").innerHTML= text;
MathJax.Hub.Queue(["Typeset",MathJax.Hub,"step1"]);
</script>
person Davide Cervone    schedule 29.09.2012