我正在嘗試預呈現使用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