J'essaie de pré-rendre un fichier html MathJax en utilisant PhantomJS. Par exemple, supposons que dans math.html
je:Comment puis-je forcer PhantomJS à attendre que MathJax soit terminé?
<!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>
Mon (cassé) renderscript ressemble actuellement:
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();
});
});
});
J'ai essayé d'écrire la page vers la sortie standard et la sortie after la La commande de rendu MathJax est appelée depuis la file d'attente. Mais il semble que je sois dans le contexte de la «page» plutôt que dans le contexte fantôme de niveau supérieur. La variable page
est introuvable: ReferenceError: Can't find variable: page
.
Je pirater dans un setTimeout
au lieu d'utiliser le drapeau:
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);
});
puis-je obtenir la sortie désirée, mais bien sûr, le temps d'attente 10000
ms dépendra du contenu. Comment puis-je faire savoir à PhantomJS que MathJax a terminé le rendu?
Est-ce un problème de bac à sable?
JavaScript est mono-thread. Vous ne pouvez pas arrêter une boucle infinie avec un événement asynchrone, car l'événement est bloqué jusqu'à ce que le thread soit disponible. – 4castle
Ah, j'ai lu les réponses sur ceci trop rapidement: http://stackoverflow.com/a/22125915/148668 –
Exactement, plutôt que de placer un drapeau dans le rappel, mettez les instructions que vous voulez exécuter dans le rappel. – 4castle