jQueryターミナルを使用して、次のようなコードがあります。
function show() {
for (var i = 0; i < 100; ++i) {
this.echo('line ' + i, {
flush: false
});
}
this.flush();
setTimeout(function() {
//this.flush();
}, 0);
}
var term = $('body').terminal({
show: show
}, {
onBlur: function() {
return false;
},
onInit: function(term) {
show.apply(term);
}
});
このコードペン内 では、ブラウザウィンドウを水平方向にサイズ変更するまで、行は表示されません。setTimeout 0 にフラッシュを入れると機能します。
setTimeout(function() {
term.flush();
}, 0);
ローカル サーバーで同じコードを (setTimeout なしで) 実行すると、正常に動作します。また、コードをiframeに埋め込もうとしましたが、期待どおりに実行されました。また、コマンド show (show と入力して Enter キーを押す) を実行すると、実行されたコマンドとプロンプトが最後 (echo によって追加された行の後) に追加されますが、ウィンドウのサイズを変更すると、必要に応じて行の前に配置されます。
なぜこれが起こっているのか、誰にも手がかりがありますか?コードがローカルと codepen で異なる方法で実行されるのはなぜですか?
jquery.terminal-src.js ファイルにブレークポイントを設定しようとしましたが、フラッシュしても行が表示されない理由がわかりませんでした。コードをステップ実行すると、フラッシュが呼び出されたときに output_buffer 配列が空のように見えますが、ウィンドウのサイズを変更してサイズ変更メソッドを実行すると、どういうわけか行が表示されます。