JS実行サンプル
なでしこ3にはjavascriptを文字列で与えて実行する JS実行
命令があります。
以下は変数aaa
をalert
…なでしこ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」はブラウザ版のプラグインに入っているので、コンソール版にはないような気がします(試してない)
コンソール版で使えるステキな方法があればコメント欄へお知らせください。