我正在尝试预呈现使用PhantomJS的MathJax html文件。例如,假设在math.html
我:如何强制PhantomJS等待MathJax完成?
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="MathJax/MathJax.js"></script>
<script src="ConfigMathJax.js"></script>
</head>
<body>
<span class="math">\(e = m c^2\)</span>
</body>
</html>
我(打破)渲染脚本目前的样子:
var page = require('webpage').create();
var system = require('system');
var fs = require('fs');
page.open(system.args[1], function() {
page.evaluate(function(){
var flag = false;
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
MathJax.Hub.Queue(function(){
console.log(page.content);
phantom.exit();
});
});
});
我试图写的页面到标准输出并退出after的MathJax渲染命令从队列中调用。但似乎我处于“页面”的上下文环境中,而不是顶级的幻影环境。变量page
无法找到:ReferenceError: Can't find variable: page
。
据我砍在setTimeout
,而不是使用标志:
var page = require('webpage').create();
var system = require('system');
var fs = require('fs');
page.open(system.args[1], function() {
page.evaluate(function(){
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
});
setTimeout(function(){
console.log(page.content);
phantom.exit();
},10000);
});
然后我得到所需的输出,当然,等待时间10000
毫秒将取决于内容。
我该如何让PhantomJS知道MathJax完成了渲染?
这是沙箱问题吗?
JavaScript是单线程的。您无法使用异步事件停止无限循环,因为在线程可用之前该事件被阻止。 – 4castle
嗯,我太快地读到这个答案:http://stackoverflow.com/a/22125915/148668 –
确切地说,不是在回调中设置一个标志,而是在回调中放置要执行的语句。 – 4castle