なでしこを明後日の方向に

日本語プログラム言語なでしこを応援しています

なでしこ3のJS実行と変数をやりとりする

JS実行サンプル

なでしこ3にはjavascriptを文字列で与えて実行する JS実行 命令があります。
以下は変数aaaalert…なでしこ3の言う命令を実行させるところです

「const aaa = "こんにちは"; alert(aaa)」JS実行

この変数aaaに、なでしこ3側で用意した変数を渡したいときの書き方を考えます。

「{変数名}」で渡す(いまいち)

挨拶「こんにちは」
「const aaa = "{挨拶}"; alert(aaa)」JS実行

まず、なでしこの変数「挨拶」に「こんにちは」を入れて、{}を使った変数の展開する方法が考えられます。

これにはいくつか面倒な点があって

javascriptに{}があると「」でくくれない
・変数の型が文字列、数値で書き方がかわる
・変数の型が配列、辞書型だと入れられない
・関数、DOM部品などの参照が難しいやつは無理

といった感じです。 いまいち!

単置換で渡す(いまいち)

挨拶「こんにちは」
『const aaa = "置換対象"; alert(aaa)』「置換対象」挨拶単置換してJS実行

「」から『』にすることで、javascriptに{}があっても影響を受けにくくなりました。
前項の問題点の1つ解決したものの、いまいち!

JSONエンコードを使う

挨拶「こんにちは」
『const aaa = 置換対象; alert(aaa)』「置換対象」(挨拶JSONエンコード)単置換してJS実行

JSONエンコードを使った方法は、文字列型・数値型・配列・辞書型に対応します。
単純な変数ならこれでOKですが、関数やDOM部品などのオブジェクトは扱うことはできません。

WINDOWを使う

挨拶「こんにちは」
WINDOW["なでしこ"]=挨拶
『const aaa = window["なでしこ"]; alert(aaa)』JS実行

なでしこ3(ブラウザ版)にWINDOWという変数があります。
なでしこさん マニュアル - plugin_browser

マニュアルでは『ブラウザのwindowオブジェクトです。』という説明になっています。
javascriptでwindowはブラウザのwindowオブジェクトを指します。
すなわち、なでしこ3の「WINDOW」とjavascriptの「window」は同じものを指しています

これなら関数やDOM部品などのオブジェクトも渡すことができます。

コンソール版では使えない?

「WINDOW」はブラウザ版のプラグインに入っているので、コンソール版にはないような気がします(試してない)
コンソール版で使えるステキな方法があればコメント欄へお知らせください。