未定义MathJax

Pat*_*tch 0 javascript mathjax

通过将MathJax建议的命令粘贴到<head>网页元素中,我已经成功加载并配置了MathJax 。MathJax在<body>我的网页的呈现LaTex方面做得非常出色。

我的问题是使用MathJax<body>元素末尾运行的javascript 访问对象。例如,下面的代码返回undefined到控制台。这让我感到困惑-不应将<head>元素中的命令创建MathJax为可以在任何地方访问的全局变量?

这是我的代码的屏幕截图: 代码截图

这是来自<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>
Run Code Online (Sandbox Code Playgroud)

这是来自<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>
Run Code Online (Sandbox Code Playgroud)

Pet*_*ger 6

您正在加载MathJax.jsasync属性。因此,浏览器在脚本加载之前不会阻止渲染,而是继续处理页面。因此,现在您需要在MathJax.js获取和加载与浏览器的解析器script在页面中进一步到达标签之间进行竞争。解析器不可避免地会赢并在MathJax.js完成加载之前执行日志。因此,没有全局MathJax对象。

如果删除async,则浏览器将MathJax.js在解析其余页面之前首先执行,因此console.log将会提供有意义的信息。(类似地,在不支持该async属性的旧版浏览器上,您将获得结果。)

但是请注意,MathJax本身是高度异步的(加载其他组件,配置等),因此您很可能需要将代码与Matax的API同步