Powershellでウェブブラウザを作る5【アドレスバー】

コンピュータ
PowerShellのあれこれ

ダミーだったアドレスバーを機能するようにします。
処理的には大まかに2つ

  1. アドレスバーに入力したアドレスにページを移動する。
  2. 現在表示中のページのURLのアドレスをアドレスバーに表示する。

1.がメインの機能になります。2はページ内のリンクをクリックしページを移動した場合の処理です。

ここで問題になるのが1.アドレスバーの入力完了を何をもって知るか?基本的なことなのですがノウハウが無いので、とりあえずアドレスバーからフォーカスが失われたイベントでページを移動させます。

2.はページの読み込み完了のイベントで実行することにしました。

<#
.SYNOPSIS
 アドレスバー
.DESCRIPTION
 説明
#>

using namespace System.Windows.Forms

param (
    [string]$StartUrl = "http://www.google.co.jp/"
)


function Main
{
    param (
        $url
    )

    $form = [Form]::new()


    $ab = [Textbox]::new() | % {
        $_.Dock = [DockStyle]::Fill
        $_.Text = $url
        $_
    }

    # フォーカスをロスト
    $ab.add_LostFocus({
        
        # テキストボックスの値が変更されている
        if ($ab.Modified)
        {
            # アドレスページへ移動
            $wb.Navigate([Uri]::new($ab.Text))
            $ab.Modified = $false
        }
    })

    $wb = [WebBrowser]::new() | % {
        $_.Dock = [DockStyle]::Fill
        $_
    }

    # ページの読み込み完了
    $wb.add_DocumentCompleted({
        # 現在表示中のページとテキストボックスのアドレスを比較
        if ($ab.Text -ne $wb.Url)
        {
            # 異なる場合Urlをセット
            $ab.Text = $wb.Url
        }
    })

    $form.Controls.AddRange(($ab, $wb))

    $form.Add_Load({
        $wb.Navigate([Uri]::new($ab.Text))
    })


    [Application]::run($form)
}

Main $StartUrl

スクリプトエラーの警告が鬱陶しいですし、遅いですが一応動いています。。
これから動作がさらに遅くなる予定です。

コメント