MathJax未定义

时间:2016-06-19 17:49:51

标签: javascript mathjax

我已成功加载并配置MathJax,方法是将MathJax推荐命令粘贴到我网页的{ "error": "access_denied", "error_description": "OAuth2 authentication required" } 元素中。 MathJax在我的网页的<head>中渲染LaTex非常棒。

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

以下是我的代码的屏幕截图: code screenshot

以下是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> 元素的相关代码部分:

<body>

1 个答案:

答案 0 :(得分:5)

您正在使用async attribute加载MathJax.js。因此,在脚本加载之前,浏览器不会阻止呈现,而是继续处理页面。所以现在你在MathJax.js获取和加载之间的竞争与浏览器的解析器之间的竞争进入页面中的script标记。不可避免地,解析器在MathJax.js完成加载之前赢得并执行日志。因此,没有全局MathJax对象。

如果删除async,则浏览器将首先执行MathJax.js,然后再解析剩余页面,因此console.log将提供有意义的内容。 (同样,在不支持async属性的旧浏览器上,您将获得结果。)

但请注意,MathJax本身具有高度异步性(加载其他组件,配置等),因此您很可能需要synchronize your code with Matax's APIs