私はを事前レンダリングしようとしています PhantomJSを使用しているMathJax htmlファイル。MathJaxが終了するまでPhantomJSを強制的に待機させることはできますか?
<!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>
マイ(壊れた)スクリプトは、現在のように見えるレンダリング::私はは標準出力して終了afterにページを書くためにをしようとしました
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();
});
});
});
例えば、私が持っているmath.html
に仮定キューから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
MSはコンテンツによって異なります待ち時間を所望の出力を得るが、。
MathJaxがレンダリングされたことをPhantomJSに知らせるにはどうすればよいですか?
これはサンドボックスの問題ですか?
JavaScriptがシングルスレッドです。スレッドが使用可能になるまでイベントがブロックされるため、非同期イベントで無限ループを停止することはできません。 – 4castle
ああ、私はこれについての回答をあまりにも早く読んでいます:http://stackoverflow.com/a/22125915/148668 –
正確には、コールバックにフラグを設定するのではなく、実行したいステートメントをコールバックに入れてください。 – 4castle