32
WebBroser Control Tips for Windows Phone 7 スススススススススス スス #16 CH3COOH( スス )

20111204 WebBroser Control Tips for Windows Phone

Embed Size (px)

DESCRIPTION

2011年12月4日にスマートフォン勉強会@関東#16でお話させて頂きました。

Citation preview

Page 1: 20111204 WebBroser Control Tips for Windows Phone

WebBroser Control Tipsfor Windows Phone 7

スマートフォン勉強会@関東 #16CH3COOH( 酢酸 )

Page 2: 20111204 WebBroser Control Tips for Windows Phone

CH3COOH( 酢酸 ) スマートフォンプログラマ (29 歳 無

職 ) デバドラからアプリ、業務系バッチま

で ここ最近半年は、 WP7 アプリ開発中

心 ブログ 

http://d.hatena.ne.jp/ch3cooh393/ サイト  http://ch3cooh.jp/

自己紹介

Page 3: 20111204 WebBroser Control Tips for Windows Phone

VS2010 から WebBrowser を使う WebBrowser の基本的な機能 WebBrowser Control Tips まとめ

本日のアジェンダ

Page 4: 20111204 WebBroser Control Tips for Windows Phone

WebBrowser Control を使ってみよう

Page 5: 20111204 WebBroser Control Tips for Windows Phone

WebBrowserTask API 標準ブラウザ (IE Mobile) を連携起動

WebBrowser Control アプリ内で唯一ウェブページを表示させ

Windows Phone アプリでウェブページを閲覧する方法

Page 6: 20111204 WebBroser Control Tips for Windows Phone

Visual Studio でプロジェクトを作成 WebBrowser をドラッグアンドド

ロップ F5 で実行

VS2010 から WebBrowser を使う

たったこれだけ!

Page 7: 20111204 WebBroser Control Tips for Windows Phone

WebBrowser デモ

Page 8: 20111204 WebBroser Control Tips for Windows Phone

デモ内容 解説 (1)

デザイナーにドラッグ&ドロップ

Page 9: 20111204 WebBroser Control Tips for Windows Phone

デモ内容 解説 (2)

Source プロパティにURL を設定

WebBrowser コントロールが表示されると、http://ch3cooh.jp/ へ遷移します

Page 10: 20111204 WebBroser Control Tips for Windows Phone

デモ内容 解説 (3)

Windows Phone エミュレータで「酢酸の実験室 ( サイト名 ) 」が表示されれば、成功です!!

Page 11: 20111204 WebBroser Control Tips for Windows Phone

WebBrowser Control の基本的な機能

Page 12: 20111204 WebBroser Control Tips for Windows Phone

標準コントロールとして提供されている

基本的なウェブ閲覧の機能 ピンチイン・アウトによるズーム パンによるスクロール

アプリ側から JavaScript の実行 表示中コンテンツ側から通知を受けられ

WebBrowser Control

Page 13: 20111204 WebBroser Control Tips for Windows Phone

WebBrowser Control Tips

Page 14: 20111204 WebBroser Control Tips for Windows Phone

ページの遷移 レスポンスをフックしてページ遷移をキャンセル ローカルリソースの HTMLを表示する DataURIScheme で画像を表示する コンテンツに定義されている JavaScript Function を実行する コンテンツに定義されていない JavaScript を実行する タイトルや表示中の URLを取得する コンテンツ側から通知を受ける User Agent を偽装して iPhone用のページをみる 自動ログイン機能を実装する

WebBrowser Control Tips

Page 15: 20111204 WebBroser Control Tips for Windows Phone

WebBrowser.Navigate(Uri) メソッドでページ遷移を行います

遷移中にいくつかのイベントが発生

ページ遷移を行う

Navigating Event

Navigated Event

NavigationFailed Event

Page 16: 20111204 WebBroser Control Tips for Windows Phone

Navigating イベントでNavigatingEventArgs オブジェクトのCancel プロパティを「 True 」に設定することで遷移をキャンセルすることが可能です。

ページ遷移をキャンセル

private void webBrowser_Navigating(object sender, NavigatingEventArgs e) { // 2 ちゃんねるドメインであればページ遷移させない if (Regex.IsMatch(e.Uri.Host, "(?:.*\\.)2ch\\.net$")) { MessageBox.Show(" 本アプリは 2ch の閲覧を許可していません!"); e.Cancel = true; } }

Page 17: 20111204 WebBroser Control Tips for Windows Phone

string 型の HTML 文字列をパラメータに、WebBrowser.NavigateToString メソッドを使うことが出来ます。

ローカルの HTML を表示する その1 (1)

webBrowser.NavigateToString("<html><head></head><boby> テストページです。 </body>");

Page 18: 20111204 WebBroser Control Tips for Windows Phone

ただし、問題が・・・ WebBrowser.NavigateT

oString メソッドを使って表示させると、日本語が文字化ける

回避するには、 HTML 上の日本語を実態参照変換させる

ローカルの HTML を表示する その1 (2)

Page 19: 20111204 WebBroser Control Tips for Windows Phone

分離ストレージに格納した HTML ファイルを参照して表示させることが出来ます。

WebBrowser.Base プロパティには分離ストレージのディレクトリを指定 これが参照時の基本ディレクトリとなる

ローカルの HTML を表示する その2 (1)

// 基本ディレクトリを設定webBrowser.Base = "help";// 基本ディレクトリからの相対パスで About.html へ遷移webBrowser.Navigate(new Uri("About.html", UriKind.Relative));

Page 20: 20111204 WebBroser Control Tips for Windows Phone

Windows Phone OS 7.1 からは、 Base64 でエンコードした画像を表示することが出来ます

Data URI Scheme を使って画像を表示する

<html> <head></head> <body> <p><img width="125" height="125" src="data:image/png;base64,iVBORw0KGgoAAAANSU ……( 中略 )…… ORK5CYII=" /></p> <p> テストページです。 </p> </body></html>

Page 21: 20111204 WebBroser Control Tips for Windows Phone

JavaScript 関数を定義した HTML ファイルがあります

この関数をアプリ側からコールすることが出来ます

コンテンツで定義されているJavaScript を実行する ( 1 )

<html> <head> <script type="text/javascript"> function funcWithoutPram() { result.innerHTML = "called funcWithoutPram"; } </script> </head> <body> <div id="result">None Data. </div> </body></html>

Page 22: 20111204 WebBroser Control Tips for Windows Phone

WebBrowser.InvokeScript メソッドを使って実行します

JavaScript の関数の引数が複数個あっても、 InvokeScript(String, String[]) メソッドが用意されているので、引数が多い日でも安心です

コンテンツで定義されているJavaScript を実行する ( 2 )

webBrowser.InvokeScript("funcWithoutPram");

// 引数が 2 つの JavaScript を実行webBrowser.InvokeScript("funcWithPram2", " 引数 1", " 引数 2");

Page 23: 20111204 WebBroser Control Tips for Windows Phone

JavaScript には eval 関数というものがあります eval 関数は string 型の JavaScript のコードを引

数として渡すと実行してくれます

コンテンツで定義されていないJavaScript を実行する

// 表示しているタイトルを取得するvar title = webBrowser.InvokeScript("eval", "document.title");

// 表示している URL を取得するvar strURL = webBrowser.InvokeScript("eval", "document.URL");

Page 24: 20111204 WebBroser Control Tips for Windows Phone

コンテンツ側から window.external.notify メソッドを使ってアプリへ通知します

コンテンツから JavaScript を使ってアプリへ文字列を渡す

( 1 )

<html> <head> <script type="text/javascript"> function funcWithPram1(parm1) { window.external.notify(parm1); } </script> </head> <body> </body></html>

Page 25: 20111204 WebBroser Control Tips for Windows Phone

window.external.notify メソッドを実行すると、アプリ側で ScriptNotify イベントが発生します

コンテンツから JavaScript を使ってアプリへ文字列を渡す

( 2 )

// コンテンツからの Script 通知を受信するprivate void webBrowser_ScriptNotify(object sender, NotifyEventArgs e) { // コンテンツから渡された引数データをメッセージボックスで表示 MessageBox.Show(e.Value);}

Page 26: 20111204 WebBroser Control Tips for Windows Phone

カスタム HTTP ヘッダーを付与することが可能なWebBrowser.Navigate (Uri, String, String) メソッドを使うと、 User Agent を偽装出来る

User Agent を偽装してiPhone 用のページを閲覧する

var ua = "User-Agent:Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en)“;webBrowser1.Navigate(new Uri(URL), null, ua);

Page 27: 20111204 WebBroser Control Tips for Windows Phone

Yahoo!JAPAN のページです。 https://login.yahoo.co.jp/co

nfig/login?.src=www&.done=http://www.yahoo.co.jp

ID 部分の id は、 username パスワードの id は、 passwd

自動ログイン機能を実装する(1)

Page 28: 20111204 WebBroser Control Tips for Windows Phone

JavaScript のコード

InvokeScript のコード (C#)

自動ログイン機能を実装する(2)

document.getElementById('username').value = 'your_id';document.getElementById('passwd').value = 'your_password';document.forms['login_form'].submit();

var parm1 = string.Format(“document.getElementById(‘username’).value = ‘{0}’”,       username);var ret1 = (string)webBrowser1.InvokeScript("eval", parm1);var parm2 = string.Format(“document.getElementById(‘passwd’).value = ‘{0}’”,        password);var ret2 = (string)webBrowser1.InvokeScript("eval", parm2);webBrowser1.InvokeScript("eval", "document.forms['login_form'].submit();");

Page 29: 20111204 WebBroser Control Tips for Windows Phone

まとめ

Page 30: 20111204 WebBroser Control Tips for Windows Phone

WebBrowser は意外と使える子でした SavaToString メソッドで HTML の

キャッシュ ローカルリソース参照でヘルプページ

を InvokeScript メソッドと ScriptNotify

イベントで、 JavaScript を使ってHTML とアプリでデータ交換

まとめ

Page 31: 20111204 WebBroser Control Tips for Windows Phone

Windows Phone Advent Calendar “ ひとり” 2010 開催中

ATND: http://atnd.org/events/22862

会場 : http://d.hatena.jp/ch3cooh393/

告知

Page 32: 20111204 WebBroser Control Tips for Windows Phone

ご清聴ありがとうございました