APIを眺めていたら、WebBrowserコントロールに目を惹かれるました。
ウェブブラウザを作ろうと思ったら、HTTP(HTTPS)通信でページを取得するリクエスト送って、結果のコンテンツを受け取り、HTMLをパースし、CSSや画像ファイルなどと一緒に画面にレンダリングして、さらにJavaScriptを実行します。それを基本非同期で処理しながら、不測の事態に対応するためしっかりしたエラー処理が必要となります。
と、ちょっと考えただけでも目眩するほどボリュームがあります。
そんな大変な処理をコントロール化したのがWebBrowerコントロールになります。理屈上WindowsFormに貼り付けるとブラウザのようなものが出来上がるはずです。
using namespace System.Windows.Forms
param (
[string]$Url = "https://maywork.net/"
)
function Main
{
param (
$url
)
$form = [Form]::new()
$ab = [Textbox]::new() | % {
$_.Dock = [DockStyle]::Fill
$_.Text = $url
$_
}
$wb = [WebBrowser]::new() | % {
$_.Dock = [DockStyle]::Fill
$_
}
$form.Controls.AddRange(($ab, $wb))
$form.Add_Load({
$wb.Navigate([Uri]::new($ab.Text))
})
[Application]::run($form)
}
Main $Url
とりあえず試作というかWebBrowerコントロールを試しただけのスクリプトになります。
実行すると警告が出ますが当サイトが表示されました。URLが表示されたテキストボックスはダミーで機能しませんが、ページ内のリンクをクリックすると別なページに遷移することが確認できました。
気になったのはWebBrowerコントロールはWebサーバーに対しどのようなクライアント名を名乗っているのでしょうか?
確認するサイトは沢山ありますが、当サイトもphpが動くので確認用のページを作ってみます。
<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>
結果
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)
Mozillaの4.0がどんなものかピンときませんがMSIEの7.0互換だとすると結構古めですので、今日日のウェブサイト特にJavaScriptなどがきちんと実行できない場合もありそうです。
これで汎用的なブラウジングをすることはきつそうですが、HTMLで書かれたヘルプページを表示するぐらいはできそうです。
コメント