水曜日, 3月 08, 2006

Dashboardのコマンド出力(前進編)


Star Fleet Empireのdashboard対応でハマッてましたが、抜け出しました。

・widget.system()で長い標準出力を取り出す方法→onreadouputを使う。
readbuf = "";    // グローバル変数を使う
var cmd = widget.system("/bin/cat " + fname, endHandler);
cmd.onreadoutput = readHandler;
return; // 以降の処理は endHandlerから再開

//outputには標準出力が帰ってくるので連結していく。
function readHandler(output) {
readbuf += output;
}

//outputにはsystemの実行結果のような文字列が返ってくるが捨てる。
function endHandler(output) {
// 以降の処理を記述
}


・write()で改行を出力する方法
これは、昨日のは単純な勘違い。escape()の出力文字列は10進数ではなくって、16進数。
cmd.write(unescape("%0A"));


・widget.systemから/usr/bin/openを使えばfinderが開くか。
→開くけど裏に出る。openURLのように前面には出てくるわけではない。
var cmd = system("/usr/bin/open [フォルダー名]", null);


で、とりあえずはロード機能が動いたのだが、新たな課題発生
openURLでローカルファイルを相対パスで開けるのか?
widget.openURL("hogehoge.html"); // ←なにも起きない
widget.openURL("file:hogehoge.html"); // ←やっぱりなにも起きない
widget.system("/usr/bin/open hogehoge.html"); // safariで開くけど、裏に出る。


もう一つの残課題は、/usr/bin/openで開いたアプリを前面に出す方法。

まあ、とりあえずこのままでも動作上は問題ないので、後でゆっくり調べます。

0 件のコメント: