V9.22β16No.11323
秀丸担当 さん 23/05/11 09:32
 
V9.22β16を公開しました。
連続ですみません。
enabledrawが文法エラーになってしまう問題だけ修正しています。
それ以外はヘルプも含めて変えていないです。

以下のページの「先行開発バージョンはこちら」からダウンロードできます。
https://hide.maruo.co.jp/software/hidemaru.html

32bit版:
https://hide.maruo.co.jp/software/bin3/hm922b16_signed.exe

64bit版:
https://hide.maruo.co.jp/software/bin3/hm922b16_x64_signed.exe

[ ]
RE:11323 V9.22β16No.11325
こみやんま さん 23/05/11 16:27
 
今バージョンでやるかどうかは別として、javascript でエラーが出た際に、
エラーの箇所だけではなく、そこを具体的な文字列として表示してやるほうが良いか
と思います。
(エラーの中に含まれてるから取れるはずだとおもうのですが...)

例えば、今 WebView2 のJSモードで

# ------------------------------------------
jsmode "WebView2";

js {
    let b = 1^^0;
}
# ------------------------------------------

ですが、エラー内容は
---------------------------

---------------------------
SyntaxError: Unexpected token '^'
    at <anonymous>:2:1
---------------------------
となります、これ今ソースに相当する部分が1行だからすぐわかりますが、
長くなると、「は?どこ?」となって、anonymousが:2:1 だから、
えーと... みたいな感じになります。

同じようなコードをhmV8で実行すると、

---------------------------
SyntaxError: Unexpected token '^'
  at Script [4] [temp]:1:15 -> let b = 1^^0;
---------------------------

この最後の、 -> let b = 1^^0; とちゃんと出るかどうかが
わかりやすさとしてはやはり大切です。

C++で直接 v8 のエラー補足したことはないですが、
hmV8 では、C#層では、以下のような感じにしているので、
似たような感じでエラーの該当箇所の具体的なコード文字列を
取得できるんじゃないでしょうか。
(これだとまぁエラー2重に出ちゃう説はあるんですが)

        try
        {
            // 文字列からソース生成
            engine.Evaluate(expression);
            return (IntPtr)1;
        }
        catch (ScriptEngineException e)
        {
            OutputDebugStream("in " + inAction);
            var stack = e.GetScriptStack();
            OutputDebugStream(stack.ToString());

            ScriptEngineException next = e.InnerException as ScriptEngineExc
eption;
            while (next != null)
            {
                OutputDebugStream(next.ErrorDetails);
                next = next.InnerException as ScriptEngineException;
            }
        }
        catch (ScriptInterruptedException e)
        {
            OutputDebugStream("in " + inAction);
            var stack = e.GetScriptStack();
            OutputDebugStream(stack.ToString());

            ScriptInterruptedException next = e.InnerException as ScriptInte
rruptedException;
            while (next != null)
            {
                OutputDebugStream(next.Data.ToString());
                OutputDebugStream(next.Source.ToString());
                OutputDebugStream(next.ErrorDetails);
                next = next.InnerException as ScriptInterruptedException;
            }
        }
        catch (Exception e)
        {
            OutputDebugStream("in " + inAction);
            OutputDebugStream(e.GetScriptStack());
        }



[ ]
RE:11323 アウトプット枠の自動折り返し(?No.11326
こみやんま さん 23/05/11 16:51
 
これも今 v9.22 バージョンである必要はないとは思いますが、

(WebView2/ブラウザ枠系というくくりで、そろそろ締める方法にしてリリースした
ほうがいい気がするので)

アウトプット枠の右側はみ出したら「自動折り返し」にするオプションを
付けてもらうほうがいいように思います。

(あくまで見た目上折り返したかのように見せるだけで、論理的行数が分かれるわけ
ではない)

文字列つらつらつらーっと続くと
そのまま、スクロールバーが伸びて直接目視出来ない範囲に文字列が
つらつらつららーっと書かれていく感じになっちゃうので...


[ ]
RE:11326 アウトプット枠の自動折り返し(?No.11327
こみやんま さん 23/05/11 17:14
 
というかこれあれですか、アウトプット枠の「横方向のスクロールバーをON/OFF」に
相当する機能を付ければ、勝手にそうなるのでは...

[ ]
RE:11325 V9.22β16No.11328
秀丸担当 さん 23/05/12 09:27
 
エラーの拾い方はJScriptとWebView2で全く異なるのですが、WebView2の場合は、C++
上ではなくjs上のtry-catchでやっていました。
普通のhtml上のjsとしても同じ考えということになりますが、ここで内容を知る一般
的な方法はどうなんでしょう。
chatGPTさんに聞いてみたら、evalする元の文字列を知っていて、行番号がわかれば
元の文字列から何行目の文字列を自分で拾うみたいな感じでした。

[ ]
RE:11327 アウトプット枠の自動折り返し(?No.11329
秀丸担当 さん 23/05/12 09:27
 
アウトプット枠は、折り返し無しですが、折り返しありにする方法があってもいいと
思います。
そういう方法も検討します。
ご指摘のとおり、単なるエディットコントロールなので、ウィンドウスタイルとか横
スクロールバーとか変えるだけでできると思います。

[ ]
RE:11323 共有ブラウザ枠のsizeデフォルトNo.11330
こみやんま さん 23/05/12 15:19
 
β14とβ16を比較してみましたが、多分 共有ブラウザ枠のデフォルトのsizeが0にな
ってしまっているかと。

------------------------------------------------------
jsmode "WebView2";

js {
    browserpanecommand(
     {
         target: "_common",
         url: "file:///c/bbbbb/a.html",
         show: 1,
     }
    );
}
------------------------------------------------------

多分、ペシャンコになってしまうかと。
(size:0 配置によりますが、0幅近く、もしくは0高さ近く)

browserpanecommand や renderpanecommand に size のプロパティ指定が入ったので、
その当たりでこのバグが混入しているのではないかと思います。

[ ]
RE:11330 共有ブラウザ枠のsizeデフォルトNo.11331
こみやんま さん 23/05/12 15:46
 
showbrowserpane や browserpanecommand で、

個別ブラウザ枠に対して、「show:1」した時はフォーカスが移動なし、
共有ブラウザ枠に対して、「show:1」した時はフォーカスが移動してしまう、

というのは仕様でしょうか。(意図せず?)

フォーカスは移動させない方がいいんじゃないでしょうか。

表示したら編集エリアからフォーカスロストして、
setfocusで取り戻す、というのは使い勝手がよくならないように思えます
(挙動的にもやや不気味だし)

フォーカス移動したければ、browserpanecommand 等に対して、focus:1 みたいなプ
ロパティを別途用意した方がいいかと

[ ]
RE:11331 共有ブラウザ枠のsizeデフォルトNo.11332
秀丸担当 さん 23/05/12 16:55
 
ご指摘ありがとうございます。
いずれもそうなったほうがいいと思います。
共通と個別は一見同じに見えるように作ってあるのですが、共通はアウトプット枠な
どの動作を引き継いでいる関係があったりしました。
ですが個別のように移さないほうがいいです。
フォーカスの制御もできたらいいです。
また検討します。

[ ]
RE:11323 browser系コマンドのurlが全文字No.11333
こみやんま さん 23/05/14 00:48
 
browser系のコマンドのurl指定に

>>プロトコル://abcabc?param=a&bbb=ccc#aaaaa

のように ? & # などが入っていても、
これの文字までも urlencode されてしまっていて、
getのqueryパラメータを含んだuriを構成できないようです。

>>プロトコル://abcabc%3Fparam=a&bbb=ccc%23aaaaa

[ ]
RE:11333 browser系コマンドのurlが全文字No.11335
秀丸担当 さん 23/05/15 12:28
 
バグ情報ありがとうございます。
?や#を含むURLを開けないことがあるとしたら、バグだと思います。
以下のようなマクロを試してみたのですが、開けて、アドレスも?や#で出ているよう
で、どういう問題が起きているか把握できませんでした。

その1
  setbrowserpanetarget "_common";
  showbrowserpane 1;
  setbrowserpaneurl "https://www.maruo.co.jp/turukame/3/x11323_.html?a=3#113
33";
  endmacro;

その2
  js{
    browserpanecommand({
      target: "_each",
      show: 1,
      uri: "https://www.maruo.co.jp/turukame/3/x11323_.html?a=3#11333"
      });
  }
  endmacro;

再現できそうなマクロがあると助かります。

[ ]
RE:11335 browser系コマンドのurlが全文字No.11336
こみやんま さん 23/05/15 14:42
 
原因がわかったように思えます。

URLが普通の"C:\abc\ddd.html" などの時、これを file:///C:/abc/ddd.html と内部
的に直しているのではないか? と思うのですが、この時に巻き添えを食っているも
のと思われます。



js {

var target_html_file = currentmacrodirectory() + "\\HttpListenerSample.html";

browserpanecommand(
    {
        target: "_each",
        url: target_html_file + "?port=7500",
        show: 1
    }
);

}


[ ]
RE:11336 browser系コマンドのurlが全文字No.11337
こみやんま さん 23/05/15 14:51
 
以下のようにすると、大丈夫になります。


js {

var target_html_file = currentmacrodirectory() + "\\HttpListenerSample.html";

function winLocalPathToUri(path) {
  var uri = "file:///";
  uri += path.replace(/\\/g, "/");
  return encodeURI(uri);
}

target_html_file = winLocalPathToUri(target_html_file);

browserpanecommand(
    {
        target: "_each",
        url: target_html_file + "?port=7500",
        show: 1
    }
);

}



[ ]
RE:11337 browser系コマンドのurlが全文字No.11338
こみやんま さん 23/05/15 14:57
 
しかし、一方でローカルのファイルには、?は使えないものの、&と#は使えるから、
これは正しいと言える処理なんでしょうか... うーん。

[ ]
RE:11338 browser系コマンドのurlが全文字No.11339
秀丸担当 さん 23/05/15 15:50
 
なるほど、そういうことで理解できました。
この場合は、やむを得ないというか、既に作られているような変換のような方法を取
っていただくしかなさそうです。
本物ブラウザのアドレスバーにC:\からの文字列を貼り付けても同様の解釈となるよ
うでした。

[ ]