レンダリング枠は、秀丸マクロと相互のやりとりができるブラウザ枠みたいなものです。マクロ(renderpanecommand文/関数)からしか呼び出せません。ローカルのhtml及びlocalhost(自PC内のサーバー)に接続可能です。相互でやりとりができるので html/css/JavaScript でマクロ用GUI も作れます。
詳細は秀丸エディタ Ver9.22の新機能 レンダリング枠を参照してください。
レンダリング枠は、エディタ画面の上下左右に配置する事とエディタ画面上にオーバレイ表示できます。レンダリング枠は識別用の名前を付ける必要がありますが複数表示可能です。
レンダリング枠内のJavaScriptからは、「js{ }」内で使用できる秀丸エディタ独自のオブジェクトは使用できません。 (秀丸マクロ実行環境外なので使用できない)
秀丸エディタマクロ → レンダリング枠 は「ブックマークレット」を使います。処理が複雑になる場合は、あらかじめJavaScriptで処理用の関数を作成しておき、それを呼び出す方がいいでしょう。
レンダリング枠 → 秀丸エディタマクロ は「window.chrome.webview.postMessage」を使います。
postMessage のパラメータにはオブジェクトを指定し、オブジェクトの funcid は関数ID、message 引数として任意の文字列を指定します。
html側の例:<script>window.chrome.webview.postMessage({funcid:関数ID,message:"引数"});</script>
"関数ID"は js{}内の関数を呼び出す場合は hidemaru.getFunctionId 、秀丸エディタマクロを呼び出す場合は registercallback を使って取得します。レンダリング枠側に "関数ID" を引き渡すのは、ブックマークレットを使います。
"引数"は文字列で指定します。
秀丸マクロが window.chrome.webview.postMessage で呼び出されたかどうかは event キーワードで判断します。指定された引数を取得するには geteventparam関数を使います。
if(event == 0){
//通常処理
}else if(event == 10){
//window.chrome.webview.postMessage で呼び出された場合
//引数を取得
$arg = geteventparam(0);
}
html/css/JavaScript でマクロ用GUI を作るには以下の手順になります。
3項で「表示完了まで待機」しているのは、レンダリング枠上でhtmlのロードが完全に終了していないと、ブックマークレットでhtml上の各要素にアクセスるのが失敗する場合もあるからです。 (htmlの各要素が完全に読み込み完了してからアクセスした方が安全だから)
レンダリング枠にあるサンプルを参照。