我已成功加载并配置MathJax,方法是将MathJax推荐命令粘贴到我网页的{
"error": "access_denied",
"error_description": "OAuth2 authentication required"
}
元素中。 MathJax在我的网页的<head>
中渲染LaTex非常棒。
我的问题是访问<body>
对象,并在MathJax
元素的最末端运行javascript。例如,下面的代码将<body>
返回到控制台。这让我很困惑 - 我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>
元素的相关代码部分:
<body>
答案 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。