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で表示する。
この方法で実験してみよう。
4) Windows8.1 の NavigateToLocalStreamUri を使う。
WebView Class (Windows.UI.Xaml.Controls) - UWP app developer | Microsoft Docs
最後はこの手段。Windows8.1が出るまで待つ。8.0は切り捨てる。