ダミーだったアドレスバーを機能するようにします。
処理的には大まかに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
スクリプトエラーの警告が鬱陶しいですし、遅いですが一応動いています。。
これから動作がさらに遅くなる予定です。
コメント