最終更新日 2025-03-30

HmCustomRenderBrowser の使い方 (ブラウザ枠の変数Objectをマクロ側へ伝達)

前節は「マクロ側のObject変数」内容を「ブラウザ枠側」へと伝達しました。
今度はその逆となります。

「ブラウザ枠側のObject変数」を「マクロ側」へと伝達します。

HmCustomRenderServer.mac のファイルだけを変更して、test.mac としてみましょう。

まず、「一式をすべてコピー」して、別のディレクトリにコピペしてみましょう。

「HmCustomRenderServer.mac」だけ名前を変更します。
他はそのままです。

ブラウザ側で sendObject したオブジェクトは、マクロ側で onReceiveObject で受け取れる

HmCustomRenderBrowser.html
<!DOCTYPE html>
<html lang="ja">
<head>
<title>HmCustomRenderBrowser</title>
<script src="./HmCustomRenderBrowser.js"></script>
</head>
<body>
<script>
let obj = {
    text: "あいうえお",
    num: 100,
    arr: [100, 200, 300],
};

HmCustomRenderBrowser.sendObject(obj);
</script>
</body>
</html>
        
test.mac
hidemaruversion "9.43.99";

jsmode "JScript\\" + currentmacrofilename;

execjs currentmacrodirectory + "\\HmCustomRenderServer.js";

js {

debuginfo(2);
function onReceiveObject(obj) {
    console.log(obj.text);
    console.log(obj.num);
    console.log(obj.arr);
}

} // js

レンダリングペイン専用に、送信オブジェクトのサイズ制限が緩和されたものが用意されています。

HmCustomRenderBrowser.sendObject(obj)

は、ブラウザ枠でもレンダリング枠でも共通で利用できます。

しかしながら、送信できるオブジェクトのサイズはそれほど大きくはありません。
長大なテキストをマクロ側へと送るといった目的には沿いません。

HmCustomRenderBrowser.sendObjectFromRenderPane(obj)

レンダリングペイン専用とはなってしまうものの、sendObject の制限を大きく緩和したものが sendObjectFromRenderPane です。

HmCustomRenderBrowser.html
<!DOCTYPE html>
<html lang="ja">
<head>
<title>HmCustomRenderBrowser</title>
<script src="./HmCustomRenderBrowser.js"></script>
</head>
<body>
<script>
let obj = {
    text: "あいうえお",
    num: 100,
    arr: [100, 200, 300],
};

// このメソッドはレンダリングペイン専用だが、送信可能なオブジェクトのサイズが大きいものとなる。
HmCustomRenderBrowser.sendObjectFromRenderPane(obj);
</script>
</body>
</html>
        
test.mac
hidemaruversion "9.43.99";

jsmode "JScript\\" + currentmacrofilename;

execjs currentmacrodirectory + "\\HmCustomRenderServer.js";

js {

debuginfo(2);
function onReceiveObject(obj) {
    console.log(obj.text);
    console.log(obj.num);
    console.log(obj.arr);
}

// オーバーライド。非同期関数なので非同期中に使える関数で構築する必要あり
function showCustomRenderPane(url) {

    renderpanecommand({
        target: "test02",
        url: url,
        show: 1,
        size: 500,
    });
}


} // js

test.macを実行

ブラウザ側のオブジェクトの内容を、いとも簡単にマクロ側へと伝達することが出来たかと思います。