ページ

2011年6月30日木曜日

[WP7] WebBrowser コントロール (WP7.0)

Windows Phone 7 の WebBrowser コントロールについてのもろもろ
注意: 以下は 7.1(Mango)ではなくすべて 7.0 の情報です。7.1 では IE9 ベースに変わってるので WebBrowser コントロールもいろいろと変わってるんじゃないかと思います。それらについてはまだまったく調べてません。

■ NavigateToString() メソッドで日本語表示
NavigateToString() メソッドで日本語を表示しようとすると化けます。内部では utf-8 に変換していないのに utf-8 で渡しちゃってるとかそんな感じなのかな?
とりあえず 「International UTF-8 Characters in Windows Phone 7 WebBrowser Control」 にあるように文字実体参照にして渡せば化けずに表示できます。

■ Data URI scheme は未サポート
Data URI scheme っていうやつ (HTML の中に <img src=="data:image/png;base64,ここにBASE64の文字列”> なんて書くやり方)について。
仕様については↓にあります。
data Protocol (MSDN Library)
The "data" URL scheme (RFC2397)
残念ながら NavigateToString() メソッドでこの書式の HTML を書きこんでも画像は表示されません。(×印になってしまう)
検索してみたら、このやり方ができるようになったのは IE8 からだそうです。で、WP7 の IE は 7+ くらいだからそもそもサポートしてないんじゃね?ということらしいです。
ということは、WP7.1(Mango) ではできるようになってるかも(未確認)

■ WebBrowser コントロールのリファレンス
WP7 の WebBrowser コントロールのドキュメントは↓
WebBrowser Control for Windows Phone
けど、ほとんど何も書いてないな。

■ WebBrowser コントロールから HTML 内の JavaScript を呼び出す
WebBrowser.InvokeScript() メソッドで HTML 内の JavaScript メソッドを呼び出すことができます。
(ただし、事前に IsScriptEnabled = true にしておく必要あり)
たとえば、HTML 内に func() という名前の関数があった場合には

this.webBrowser1.InvokeScript("func”);

といった感じです。
関数に引数がある場合は this.webBrowser1.InvokeScript("func”, “abc”, “あいう”); でいけました。(この場合、日本語も化けませんでした)

■ HTML 内の JavaScript からの呼び出しを WebBrowser コントロールのイベントで受け取る
WebBrowser.ScriptNotiry イベントで HTML 内の JavaScript から呼び出しをイベントとして受け取ることができます。
HTML 内に <input type="button" onclick="window.external.Notify('button1 click')" value="click"/> なんてのがあった場合、

this.webBrowser1.ScriptNotify += webBrowser1_ScriptNotify;

private void webBrowser1_ScriptNotify(object sender, NotifyEventArgs e)
{
    MessageBox.Show(e.Value);
}

という感じです。

■ 拡大縮小できないようにする
Web ブラウザーなので拡大縮小できてしまいますが、これは <head> に

<meta name="viewport" content="width=200"/>
<meta name="viewport" content="user-scalable=no"/> 

を入れておくと禁止できるようです。

0 件のコメント:

コメントを投稿