最終更新日 2025-03-30

HmCustomRenderBrowser の使い方 (上書き保存をした時だけ更新)

保存をした時だけ、個別ブラウザ枠を更新し、編集エリアの内容の変更に追従はしない、といった場合の例となります。

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

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

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

test.macを編集

test.mac を以下のように編集してみましょう。
watchsave: 1 を付け足す形です。

test.mac
hidemaruversion "9.43.99";

jsmode "JScript\\" + currentmacrofilename;

execjs currentmacrodirectory + "\\HmCustomRenderServer.js";

js {

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

    browserpanecommand({
        target: "_each",
        url: url,
        show: 1,
        watchsave: 1,
        size: 500,
    });
}

} // js
        

HmCustomRenderBrowser.htmlを編集

秀丸のテキスト内容の変化にいちいち追従しないため、HmCustomRenderBrowser.setTimeout を使います。

test.mac
<!DOCTYPE html>
<html lang="ja">
<head>
<title>HmCustomRenderBrowser</title>
<script src="./HmCustomRenderBrowser.js"></script>
</head>
<body>
<div id="output"></div>
<script>
document.addEventListener('DOMContentLoaded', ()=>{
    HmCustomRenderBrowser.setTimeout(onReceiveObject, 0);
});

function onReceiveObject(obj, error) {
    if (obj) {
        output.innerText = obj.text;
    }
}
 
</script>
</body>
</html>
       

test.txtを用意

適当に「かきくけこ」などと書かれたテキストを用意

test.macを実行

実行時の流れを説明すると、以下のようなこととなります。

watchsave → 上書き保存時にブラウザ枠リロード

watchsave によって、「保存した時」に「個別ブラウザ枠」が更新される。

リロード → DOMContentLoaded が実行

個別ブラウザの更新によって、HTML側は「リロード」された形となるため、
ブラウザ枠の内容は一度クリアされ、
htmlが読み直され、DOMContentLoaded が再度実行される。

HmCustomRenderBrowser.setTimeout により、1回だけ実行

HmCustomRenderBrowser.setInterval ではなく、
HmCustomRenderBrowser.setTimeout を利用することで、
最初の1回だけonReceiveObjectが実行されます。