hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

EBPocket for WinRT(4) - WebViewでローカルHTMLを表示する方法の考察

前回、「Windows8のストアアプリのWebViewではローカルデータのHTMLを表示できない」という問題について述べた。
その後、いくつか解決できそうな手段を見つけたので、以下に列挙する。

1) インプロセスHTTPサーバー

http://blog.jsolutions.co.uk/?p=492
アプリ内部で簡易HTTPサーバーを動かし、ローカルサーバーとしてアクセスする。

<Grid Background={StaticResource ...}>
<WebView Source="http://localhost:8088/index.html"/>
</Grid>

その発想は無かった! ただし、セキュリティホールそのものだし、ストアアプリのセキュリティ方針(外部からロードしたスクリプトは実行させない)に反するので、審査に通らないかもしれない。また、安定動作するかどうかやや疑問。

2) InstalledLocationにhtmlを保存

windows 8 - Load local HTML into WebView - Stack Overflow
InstalledLocationにhtmlを保存し、
Navigate(new Uri("ms-appx-web:///" + "...")
のように表示する。でもInstalledLocationはread-only のはずなんだが...
実際に試すと、Win32APIではInstalledLocationに書き込みはできなかった。

3) base64で画像埋め込み

http://www.verious.com/qa/display-an-image-in-win-rt-web-view-control/

この方法が本命だと思う。次のように画像をbase64に変換してhtmlに埋め込み、NavigateToStringで表示する。

<img src="data:image/png;base64,XXXXXXXXXX..." />

この方法で実験してみよう。

4) Windows8.1 の NavigateToLocalStreamUri を使う。

WebView Class (Windows.UI.Xaml.Controls) - UWP app developer | Microsoft Docs
最後はこの手段。Windows8.1が出るまで待つ。8.0は切り捨てる。