Ich versuche zu vorrendern eine Mathjax HTML-Datei PhantomJS verwenden. Zum Beispiel in math.html
nehme an, ich habe:Wie kann ich PhantomJS zwingen zu warten, bis MathJax fertig ist?
<!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>
My (gebrochen) machen Skript sieht derzeit wie:
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();
});
});
});
Ich habe versucht, die Seite zu Standard zu schreiben und Ausfahrt after die Der MathJax-Render-Befehl wird aus der Warteschlange aufgerufen. Aber es scheint, ich bin im Kontext der "Seite" und nicht im Phantom-Kontext der obersten Ebene. Die Variable page
kann nicht gefunden werden: ReferenceError: Can't find variable: page
.
Es hack ich in einem setTimeout
statt, die die Flagge mit:
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);
});
dann habe ich die gewünschte Ausgabe zu erhalten, aber natürlich die Wartezeit 10000
ms nach dem Inhalt ab.
Wie kann ich lassen PhantomJS wissen, dass Mathjax getan wird Rendering?
Ist das ein Sandbox-Problem?
JavaScript single-threaded ist. Sie können eine Endlosschleife mit einem asynchronen Ereignis nicht stoppen, da das Ereignis blockiert wird, bis der Thread verfügbar ist. – 4castle
Ah, las ich die Antworten auf diese zu schnell: http://stackoverflow.com/a/22125915/148668 –
Genau, also eher als ein Flag in der Callback-Einstellung, setzen Sie die Anweisungen, die Sie in der Callback ausgeführt werden soll. – 4castle