f

アーカイブ

2016-05-04

JScriptのWScript.Echo()とJavaScriptのconsole.log()の共通化

JScriptで書いたコードがJavaScriptでも動作するように調整する。

メッセージの表示でよく使うWScript.Echo()console.log()を共通化する。try-catch文で実際に関数を実行して成功するかどうかで判定する。

function print(text){
try {
console.log(text);
} catch (e) {
WScript.Echo(text);
}
}

print("HI");

このようにprint()というWrapper関数を作ってしまえば,JScriptとJavaScriptのどちらでも使える。

以下のようにif文でconsoleオブジェクトの有無で判定すると,オブジェクトが存在しなければ,エラーが表示されてしまう。tryで実際に試してエラーを検知したほうが確実だ。

if (typeof(console)) console.log(text);
else WScript.Echo(text);

2016-08-14追記:これはif文のやりかたが悪かっただけだった。以下のようにきちんとやれば問題ない。

if (typeof(print) === "undefined"){  // for SpiderMonkey
  function print(text){
    if      (typeof(console) !== "undefined") console.log(text );
    else if (typeof(WScript) !== "undefined") WScript.Echo(text);
  }
}

SpiderMonkeyではprint関数が既にあるので,if文を関数定義の前に書いて回避している。

0 件のコメント:

コメントを投稿