ブラウザ枠まわりの確認事項No.11410
western さん 23/05/29 07:58
 
自分はレンダリング枠ばかりで、ブラウザ枠を全く活用していなかったのですが
いくつかブラウザ枠を使うマクロを作った際に気になった挙動です


■ file:/// でセットしたURLと取得するURLが変わる

再現方法

1. test.mac(下記) と test.html(空で良い) を同じフォルダに用意する

== test.mac ================
setbrowserpanetarget "_each"; // 個別ブラウザ枠でテスト
showbrowserpane 1; // ブラウザ枠を表示
$htmlPath = strreplace(currentmacrofilename, ".mac", ".html"); // 現在のマク
ロと同名の .html ファイルのパス
$browseURL = "file:///" + strreplace($htmlPath, @"\", "/"); // URIにする
setbrowserpaneurl $browseURL; // URLをブラウザ枠にセット (存在しなくてもエ
ラーにはならずURLは記憶される)
if ($browseURL != decodeuri(browserpaneurl)) {
 message sprintf("URLが変わってるよ\n%s\n%s", $browseURL, decodeuri(browserp
aneurl));
}
endmacro;
== test.mac ここまで =======

2. test.mac を実行すると message が表示される


ドライブレター部分が大文字に変換されるのが原因と思われる
これは意図する動作か?

これを意図して回避する手順はどれを使うべきか?
・currentmacrofile{name,directory} に小文字に変換しないバージョンのキーワー
ド2があれば、とりあえずは解決?
  これでほぼ回避できそうな気はしますが、想定するパターンが全て解決するかの
洗い出しは出来ていません

・指定のファイル名(今回はマクロ名/上記の.html)を全小文字にせず、元の英数大小
で取得できる関数などありますか?
  開いているファイルや直接指定のマクロしか見に行かないので、上記だけで充分
な気もする
  HTMLなどを設置するサーバは Case Sensitive なOSが多いので、URL周りは英数
大小に厳密な処理がしたい思いはある

・ドライブレター部分のみ? が大文字に変化する前提(WebView2?の仕様は未確認)
で、変数のURLを大文字に書き戻す
・setbrowserpaneurl した直後に decodeuri(browserpaneurl) で得られるURLを後の
判定などで使いまわすべき?


■ アドレス設定時のエラー時の表示

ブラウザ枠でHTTP通信エラーが出た場合は、その旨を表示できないか?

一般的なブラウザでは、DNSエラーやサーバ応答なしなど表示される動作
真っ白が正しいのかエラーなのか見た目で判断できない

■ ブラウザ枠の表示位置

[動作設定]の[(共通|個別)ブラウザ枠]の[位置] の設定の値も直接連動しているが
個別ブラウザ枠も、全タブでドッキング位置は同じになる、という想定でよいか?

■ ブラウザ枠を閉じた後に得られる値について

・枠が閉じている状態で browserpanesize は 0 となる保証はあるか?
・枠が閉じている状態で browserpanehandle は 0 となる保証はあるか?
・browserpaneurl が空文字ではなく取得できるが「最後に表示していたURL」という
趣旨で利用して問題ないか?



よろしくお願いします

[ ]
RE:11410 ブラウザ枠まわりの確認事項No.11411
western さん 23/05/29 08:24
 
追加です

■ ブラウザ枠の size の値の取得トラブル

再現方法

#setSize = 512; // 事前に枠のサイズを 512 以外にしておく
browserpanecommand sprintf("""
 {
  "target": "_each",
  "show": 1,
  "place": "rightside",
  "size": %d
 }
 """, #setSize); // browserpanecommand の size 指定
// setbrowserpanesize #setSize, 2; // これを挟むと 正しく取得出来る / これを
コメントアウトすると正しく取得出来ない

message sprintf("set %d / get %d", #setSize, browserpanesize(2)); // browser
panesize(2) で取得できる値が #setSize と異なる
endmacro;

上記 setbrowserpanesize の有無で browserpanesize(2) で返る値が変わります

[ ]
RE:11410 ブラウザ枠まわりの確認事項No.11412
western さん 23/05/29 08:32
 
1つにまとめて投稿するツモリが五月雨なってすみません

ブラウザ枠(ドッキングのレンダリング枠を含む)の表示ですが
閉じた状態から『以前と違うサイズの値を指定』して表示状態にするときに、

一瞬「以前のサイズ」で表示され「指定したサイズ」にリサイズ

という動作になっていると思います。

これをガクっとさせずに表示という動作は可能でしょうか?
ブラウザ枠の表示前には setbrowserpanesize をしても記憶されなかったりと
UI周りで気になりました

[ ]
RE:11410 ブラウザ枠まわりの確認事項No.11415
秀丸担当 さん 23/05/29 15:26
 

file: のURLは、秀丸エディタとして明示的にドライブを大文字にはしていないです。
edgeやchromeでもドライブは大文字になるみたいなので、規則か慣習かわからないで
すが、大文字が妥当という気がします。

ブラウザ枠でエラーになった場合は確かにわからないので、何らかの表示か取得でき
る方法があったらよさそうです。
ブラウザ枠のドッキング位置は、基本的に全タブで同じになる想定でいいです。

>・枠が閉じている状態で browserpanesize は 0 となる保証はあるか?
>・枠が閉じている状態で browserpanehandle は 0 となる保証はあるか?

枠が閉じているかどうかの判定でこれらを使うとしたら、違うことになるかもしれな
いです。
将来invisibleのようなことをブラウザ枠でもやるかもしれず、共通のほうは実は再
利用していてハンドルだけあったりしますが、都合悪かったら逆に0にする変更もあ
るかもしれないです。
{get:"show"}で得るのがいいと思います。

>・browserpaneurl が空文字ではなく取得できるが「最後に表示していたURL」という

個別ブラウザ枠だとなぜか取得できてしまいました。
閉じていれば空となるようにしようと思います。

その他、browserpanesizeが違う点や、表示のされ方など修正します。

[ ]