2016-06-19 3 views
0

Я успешно загрузил и сконфигурировал MathJax, вставив рекомендованные MathJax команды в элемент <head> моей веб-страницы. MathJax отлично справляется с работой LaTex в <body> моей веб-страницы.MathJax не определен

Моя проблема заключается в доступе к объекту MathJax с javascript-запуском в самом конце элемента <body>. Например, приведенный ниже код возвращает undefined на консоль. Это меня смущает - не должны ли мои команды в элементе <head> создать MathJax как глобальную переменную, к которой можно получить доступ в любом месте?

Вот скриншот моего кода: code screenshot

Вот соответствующая часть кода из <head> элемента:

<script type="text/x-mathjax-config"> 
    MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}}); 
</script> 
<script type="text/javascript" async 
    src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"> 
</script> 

Вот соответствующая часть кода из <body> элемент:

<h1 class="header"> 
    If $ax^2+bx+c=0$, then $x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$. 
</h1> 

<script type="text/javascript" > 
    console.log(window.MathJax); 
</script> 
+0

Ваш скрипт включительно не работает. Перед ссылкой на него необходимо включить скрипт MathJax. –

+0

@EvanTrimboli, спасибо, однако проблема связана со сценарием на строках 25:27, а не с порядком скриптов в элементе ''. (Я согласен, что порядок скриптов в элементе '' изменит смысл, однако я скопировал их, поскольку они прямо из [http://docs.mathjax.org/en/latest/start.html] (MathJax.org), и они, похоже, работают нормально.) – Patch

+0

Примечание от будущего: cdn.mathjax.org близится к концу своего срока, проверьте https://www.mathjax.org/cdn-shutting- вниз/для подсказок миграции. –

ответ

2

Вы загружаете MathJax.js с async attribute. Поэтому браузер не блокирует показ, пока скрипт не загрузится, а вместо этого продолжит обработку страницы. Итак, теперь у вас есть гонка между MathJax.js, получаемой и загруженной, и парсером браузера, добирающимся до метки script далее на странице. Неизбежно, парсер выигрывает и выполняет журнал до того, как MathJax.js закончил загрузку. Соответственно, нет глобального объекта MathJax.

Если вы удалите async, браузер сначала выполнит MathJax.js перед разоблачением оставшейся страницы, и поэтому console.log предоставит что-то значимое. (Аналогично, в старых браузерах, которые не поддерживают атрибут async, вы получите результат.)

Обратите внимание, что MathJax является очень асинхронным (загрузка дополнительных компонентов, конфигураций и т. Д.), Поэтому вам, скорее всего, понадобятся до synchronize your code with Matax's APIs.

+0

@PeterSmith, спасибо! – Patch

Смежные вопросы