Cocoaはやっぱり!
インターネットにアクセスしよう
Web Kit #3 : コードを書かずにWebブラウザを作る

今回のテーマ

今回のテーマは、コードを書かずにWebブラウザを作るというものです。もちろん、コードを書かないのでそんなに大層なものを作ることは出来ませんが、Cocoaらしく?超手抜きプログラミングといってみましょう。

推奨環境 この解説は、以下の環境を前提に作成し、動作確認等を行っています。ご確認ください。

改版履歴

サンプルの概要

今回作成するサンプルは「 コードの無いWebブラウザ 」です。しかし、機能的には、「 URLの入力/ロケーションファイルのドロップ/戻る/進む/文字を大きく/文字を小さく/中止/リロード 」などなどと盛りだくさんです。以下が実際に動かしたところです。

Web Kitを使うための準備

Web Kitを使用するためには、若干の準備が必要です。Cocoa-Applicationでプロジェクトを作成しましたら、プロジェクトにWebKitのフレームワークを追加します。そして、プロジェクトウィンドウの左側の「 Frameworks / Linked Frameworks 」の中に入れておきます。これでProject Builder側はOK。次は、Interface Builder。「 Resouces / MainMenu.nib 」をInterface Builderで開きます。Project Builderにもどって、「 Frameworks / Linked Frameworks / WebKit.framework / WebView.h 」をInterface BuilderのMainMenu.nibへドロップします。これで、WebViewの定義がInterface Builderへ伝わります。

ウィンドウのデザイン

さて、突然WebViewという言葉が出てきましたが、このWebViewというのがWebブラウザを実現するための核となるビューで、この中にWebページが表示されます。先程の図でWebページが表示されていたところがWebViewになります。では、早速ウィンドウのデザインをしてみましょう。

先程の図で分かるように、ウィンドウの大半を占める部分がWebViewになります。CustomViewをまずは、ウィンドウの中に配置します。そして、これをWebViewクラスのインスタンスに変更します。Info Panelの上部にあるメニューからCustom Classを選択すると、クラス名の一覧が出てきますので、WebViewを選びます。これでWebViewになりました。

後は、どんどんとプッシュボタンを並べていって、WebViewのアクションに接続していきます。戻る ( goBack : )、進む ( goForward : )、文字を小さく ( makeTextSmaller : )、文字を大きく ( makeTextLarger : )、中止 ( stopLoading : )、リロード ( reload : )にそれぞれ接続してください。一番右のNSTextFieldは「 takeStringURLFrom : 」に接続します。

動かしてみよう

実は、もうブラウザは完成しています。では、ビルドして実行してみましょう。

URL入力部分にURLをタイプしてReturnキーを押します。すると takeStringURLFrom : メソッドが実行されますが、このメソッドは「 メッセージの送信元から文字列を取得してそのURLにアクセスする 」というものです。ですので、しばらくするとページが表示されるはずです。経過表示やエラー表示はありませんので、URLはよく確認してください。さて、ページは表示されたでしょうか。

リンクをクリックすればリンクジャンプして次のページが表示されますし、フォームの実行も出来ます。その後戻るボタンで戻ることも可能になります。文字サイズ変更等も試してみてください。WebViewをControl+クリックするとコンテキストメニューも出ますよ。全機能が使えるわけではありませんが、WebViewがどこまでやってくれるのか、いろいろと触って試してみてください。

また、WebViewというのは、Webブラウザのコンテンツ表示を行うものです。つまり、HTMLだけでなく、テキストファイル、JPEGやGIFやPNGなどの画像、QuickTimeやMPEGやFlashなどの動画も表示できますし、MP3の再生までできちゃいます。万能ビューワーという感じですね。手抜きプログラミングには最適なビューと言えるでしょう。

できないことなどをいくつかリストアップしておきます。
・新たにウィンドウが開くリンクでリンクジャンプできない。
・ファイルのダウンロードができない。
・文字化けすることがある。
・訪問済みのリンクの色が変わらない。
・コンテキストメニューで実行できないものがある。