Javascript External Library

2023-03-26

Microsoft.Web.WebView2.NavigateToString の Referer

結論から言うと「about:blank」で Microsoft.Web.WebView2.Source に収納されている。

この情報がなぜ必要になったかというと Microsoft.Web.WebView2 で NavigateToString を使うときに制限としてつけるためです。
Google Maps JavaScript API はAPIキーによる制限とキー単位での課金形態が取られています。キーが中露韓に不正利用される可能性があるのでキー以外にも制限を掛ける必要があります。
Googleが提示する制限は「Webサイト用のReferer制限」と「接続元IP制限」と「Androidアプリのキーによる制限」と「iOSアプリのキーによる制限」となっています。では、「Windowsアプリ」はどうするかというと「Webサイト用のReferer制限」を利用します。

何も指定しない場合で NavigateToString メソッドで NavigateToString を利用した場合は Source プロパティの初期状態である「about:blank」が送信されます。
ただ、「about:blank」では正直なところセキュリティは弱そうなので、他に使えるのは https://developers.google.com/maps/documentation/javascript/get-api-key にある about://, app://, applewebdata://, asset://, chrome://, content://, file://, ftp://, ionic://, local://, ms-appx://, ms-appx-web://, ms-local-stream://, prism://, qrc://, res://, saphtmlp:// を使いたいですね。

2023-03-18

山形仙台間高速バス旅行

はじめに

東北線仙台と奥羽線山形を行き来するにはローカルな仙山線を利用するしかない。と言うのは鉄道を利用する立場からの話です。聞くところに寄ると仙台-山形間は高速バスのほうが利便性が高いらしいです。
元は国道286号線の酷道で笹谷峠を通過する必要があったところを今は山形自動車道が通り、それを利用する高速バスがローカルな仙山線を駆逐する勢いだとか。
ちょっと乗りに行ってみよう。(そしてついでに牛肉を食べてこよう)

旅程

旅程

1日目

山形へ

春の18きっぷシーズンなので移動は18きっぷを利用するとします。今日は山形まで移動してバスは明日利用することにします。
山形へは東北線で福島に行き、福島から奥羽線というのがいつものルートですが、福島米沢間は18きっぷを利用するにはタイミングが難しいんですよね。バスとの乗り比べを考えて仙山線を利用するとして、仙台までは久しぶりに常磐線経由で行ってみることにします。

品川駅駅名板
6:00
品川駅からこの旅は始まります。
早速、常磐線に行く10番ホームに行ってみると次は6:35とのこと。本数結構少ないんですね。時刻表を見ると6:35が始発でした。
時間もあるので構内のコンビニで朝ごはんを調達しますか。

6:35
常磐線勝田行きの電車に乗ります。
今回は費用を抑えるためにグリーン車は使わないで行きます。

水戸駅駅名板
8:45
勝田の手前の水戸で下車します。
次の電車は水戸始発になります。

9:09
いわき行きの電車に乗ります。
この間に高萩行きの特急、上野からの普通、水戸線からの普通が来たので本数は激減ですね。

いわき駅駅名板
10:50
いわきに到着しました。
ここから原ノ町は常磐線でも本数の少ないエリアになります。

たむら 海鮮丼
次の電車まで時間があるので、駅前のショッピングモールのラトブにあるたむらさんで昼ごはんにします。
ランチメニューの一番上にあった海鮮丼にしました。
海鮮丼のネタの並びが白身からスタートして赤身で終わり卵で締めるという感じです。これは完全にお寿司ですね。夜はお寿司屋さんなのかな。板前さんの心配りが嬉しいです。

12:14
原ノ町行きに乗ります。

原ノ町駅駅名板
13:37
震災と民主党にいじめられた地域を通過して原ノ町に到着しました。
次も30分程度待ちます。
このあたりは震災の影響で乗り継ぎダイヤが良くない感じですね。

14:04
仙台行きの電車になります。

仙台駅駅名板
15:23
仙台駅に到着しました。

うふれっと
駅の改札前にお店が並んでいたのでおやつを調達しました。
味は美味しかったのですが、ふわふわでクリームたっぷりだったので指がクリームまみれになっちゃった。これはフォークが必要なお菓子でした。

16:00
快速の山形行きに乗ります。
ここで列に並び遅れてしまって着座に失敗してしまいました。

山形駅駅名板
17:19
山形に到着しました。
山寺までたちっぱになってしまった。

さて米沢牛を探そうかな。

山形牛山形地鶏

1軒目のお店は予約が一杯でふられてしまった。
2軒目のウルスさんにしました。
こちらも今日は予約でいっぱいだが1人で1時間半までだったらいいですよということで入れてもらえました。ありがとうございます。

ウルス 牛ハラミ
牛肉を食べに来たので牛肉をたんだのですが、

ウルス 山形鶏4種盛り
ここは山形地鶏がおすすめということで4種盛りを頼みました。
牛に負けない美味しさでした。大ぶりの肉も食べごたえがあって良かったです。

これは思わぬ伏兵に出会った感じです。
お店は1時間少々で退店しました。まあ、一人なのでこんなものですよね。

今日の宿

ホテルα1山形 外観
宿は楽天で予約したホテルα1山形です。素泊まりで安かったです。

ホテルα1山形 宿泊部屋
設備はややくたびれた感がありますが、清潔だし特に問題ないですね。
難点はコンセントの数が少なくて位置が遠いことかな。WiFiは問題なく使えました。

2日目

宮城交通バス

夜が明けました。この旅のメインイベントである高速バスに乗りましょう。

山交ビル
仙台行のバスは山交バスと宮城交通バスの共同運行で山形側は山交バスのバスターミナルから出発します。
バスターミナルはテナントも入るビルになっていました。高速バスのターミナルなので宿泊施設もあっていいような気がしますがそれはない。

仙台方面案内
ビルの前のバス停は近郊路線のようで長距離路線の案内がありました。
ビルの裏手のようでビルの中を通り抜けます。

山交バスターミナル3番乗り場
仙台行きはビル裏手の発着場の3番からのようです。
まずは切符ですね。券売機があったのですが、窓口だとSuicaが使えるということで、窓口に回ります。
窓口で次のバスの片道がほしいと告げると係員さんはおもむろに券売機に行き券売機を開け始めました。そういう方法かい。
開けたところで「社内でSuicaタッチで決済できますよ」ということでした。
え?高速バスですよね?あと、なぜ券売機を開けた?
社内で払う旨を告げて窓口を後にしました。
普通電車並みの手軽さですねえ。

宮城交通バス 準備
停車していた宮城交通バスが仙台行きの表示をしました。
私の乗るバスはこれかな。そう思ってたら、おもむろに出ていってしまったw

宮城交通バス 入場
暫く待つとビルを一周して入場してきました。

9:40
仙台に向けて出発します。
運行は宮城交通バスのでした。

宮城交通バス 下車
10:54
3分遅れで仙台駅前に到着しました。
バスは仙台市役所まで行くのですが、帰りは仙台駅なのでここで下車します。
高速バスで3分送れは定刻と言っていいですね。定時制も良さそうです。

牛タン

伊達の牛たん本舗 芯たん定食
そもそも牛肉を食べに来たのですが、機能は鶏の旨さに浮気してしまいました。
仙台の牛タンをいただくとしましょう。
仙台駅の地下にある伊達の牛たん本舗さんで頂きます。数量限定のタン元の定食がまだあるということで注文しました。
厚みのあるタン元ということでしたが、タン先でも仙台の牛タンは厚切りなのであまり大差はない気もしますね。味はもちろん美味しかったです。
入るときは待ち時間なしでしたが、出るときは行列ができてました。早めにこれてよかった。

帰路

12:00
お腹も膨れて満足したので東京に帰ります。
まずは白石行きに乗ります。

12:48
白石に到着しました。

12:52
すぐに福島行きに乗ります。

福島駅駅名板
13:27
福島に到着です。

13:39
新白河行きにのります。

郡山駅駅名板
14:27
郡山に到着しました。
新白河行きなのですが、ここで24分ほど待機です。
乗務員の交代と運賃箱の準備をしてるようでした。特にワンマンになるわけではないのですが、折り返しの準備を郡山までやってるのかな?

新白河駅駅名板
15:30
新白河に到着しました。

15:47
黒磯行きに乗ります。
新白河は同じ線路の延長の別ホーム乗り換えになるので移動距離が長くなります。
黒磯ダッシュに備えて最前方の車両を目指します。

16:10
黒磯に到着しました。
跨線橋を急いで渡ります。

16:16
宇都宮行きに乗ります。
短い3両編成でした。急いで並んでよかった。

宇都宮駅駅名板
17:09
宇都宮に到着しました。
ここで晩御飯も考えたのですが、あんまりお腹が減ってないのでこのまま帰ることにします。

17:15
この旅最後の列車となる熱海行きに乗ります。

品川駅駅名板
19:14
品川駅に到着しました。

この旅はここまでとなります。
明日からはマスク無しで電車に乗れるようになります。旅がはかどりますね。

お土産
電車に長時間乗って乗り換えも多いので、お土産は仙台で少しだけ買ってきました。

費用

  • 交通費
    • JR
      • 青春18きっぷ 2日分 4,820円
    • 宮城交通バス
      • 山形→仙台 1,000円
  • 宿泊費
    • 1日目 5,000円
  • 食費
    • 1日目朝 245円
    • 1日目昼 1,100円
    • 1日目夜 5,580円
    • 2日目朝 419円
    • 2日目昼 2,990円
    • その他 390円
  • その他
    • お土産 2,734円

計 24,278円

新たに追加された訪問地


さいごに

仙台と山形の間は山形道の開通で高速バスが有利だということで利用してみました。
予約無しでSuicaだけで乗れるということでほぼ電車と変わらない利用感になっています。間に奥羽山脈があるので冬季の通行が気になるところですが、山形道と並行する国道286号線は冬季閉鎖中にも関わらず高速道路の方は問題なく通行できている感じです。
輸送力に関しては日中は10分に1本で混雑する時間帯は4~5分間隔になります。通勤電車かな。
仙台と山形というピンポイントな2拠点の連絡に限定するならバスが良さそうですね。

山形では山形鶏を頂きました。大振りな肉で味もしっかりしていてとても美味しかったです。店の方によるとまだ数が多くないらしくて提供できる店は少ないということでした。牛肉は高騰が続いているので貧乏な庶民には嬉しいです。

2023-03-04

Microsoft.Web.WebView2 で動的文字列を表示させる

public void NavigateToString(string html)
{
    if (WebViewer.CoreWebView2 == null)
    {
        WebViewer.CoreWebView2InitializationCompleted += (sender, _) =>
        {
            if (sender == null) return;
            ((WebView2)sender).NavigateToString(html);
        };
        WebViewer.EnsureCoreWebView2Async();
    }
    else
    {
        WebViewer.NavigateToString(html);
    }
}
Chrome使えばいいのにわざわざアプリ内でChromium使う理由・・・
それはアプリ内のリソースをHTML表示させるためですよね。
Microsoft.Web.WebView2 で文字列を表示させるには NavigateToString(String) メソッドを使えばいいです。ただ、WebView2 自体が Initialize されていても内部の CoreWebView2 が起動しているとは限らない。これが詰まるポイントでした。
WPF の WebView2 には Initialized プロパティがあるのですが、これはあくまでもWPFの初期化状態を示すだけなので CoreWebView2 の存在性を確認します。起動してない場合は EnsureCoreWebView2Async メソッドを呼び明示的に起動させます。EnsureCoreWebView2Async はやや高コストの処理で WebView2 が表示状態でないと処理が完了しないようなので Wait しないでスレッドを進行させます。代わりに CoreWebView2InitializationCompleted イベントを拾って改めて NavigateToString を試みるようにします。

Microsoft は Microsoft.UI.Xaml.Controls.WebView2 になってた。いい加減MAUIしろとMS様がおっしゃっておられる・・・