5

LocalStateディレクトリにあるときにWebページに画像をロードできません。

具体的には、ファイルパスがLocalStateディレクトリを参照しているときにWebページを起動しようとすると、セキュリティ上の問題があるようです。

htmlファイルを右クリックして、Visual Studio内のブラウザーで表示すると、Webページに画像が読み込まれます。

srcタグのパスを次のように変更しました:src = "ms-appdata:///Local/Logo.jpeg"動作しません。

助けて...

サンプルコード

public static async Task Update(WebView webview, IStorageFile file) { 
  var html = await Windows.Storage.PathIO.ReadTextAsync(file.Path);
  webview.NavigateToString(html);
 } 
4

1 に答える 1

2

NavigateToString メソッドは、LocalData フォルダー内の画像を指すタグでは機能しません。(とにかく覚えている限り)。実際、NavigateToString は JavaScript と CSS のリンクも壊します。

サーバー上の画像

1 つの解決策は、ローカルデータではなくネットワーク サーバーを指すようにソースを変更することです。ただし、アプリのシナリオでうまくいくかどうかはわかりません。

コンテンツとしての画像と HTML

2 番目の選択肢は、html ファイルと画像ファイルをコンテンツとしてアプリに追加して使用することです。

WebView1.Navigate(new Uri("ms-appx-web:///assets/SampleHtmlPage.html"));

HTML をロードします。

インプロセス HTTP サーバー

アプリでカスタム HTTP サーバーを使用して問題を処理するソリューションを次に示します。

Metro WebView でのローカル HTML コンテンツの読み込み (Windows 8)

Base 64 でエンコードされた画像

最後に、LocalData フォルダー内の画像の Base64 エンコードを使用する別のソリューションがあります。

internal async void MakeHtmlString()
{
  StorageFile imageFile; // get image file here.

  var html = 
     string.Format("<div><img src='data:image/png;base64,{0}'", 
                    await GetImageBase64(imageFile));
}

internal async Task<string> GetImageBase64(StorageFile imageFile)
{
  var imageStream = await imageFile.OpenAsync(FileAccessMode.Read);
  var inputStream = imageStream.GetInputStreamAt(0);
  var dataReader = new DataReader(inputStream);

  var dataResults = await dataReader.LoadAsync((uint)imageStream.Size);
  var bytes = new byte[dataResults];
  dataReader.ReadBytes(bytes);
  return Convert.ToBase64String(bytes);
}

この最後のアプローチは、画像に対しては機能しますが、CSS ファイルに対しては機能しません。

于 2013-04-16T19:51:21.037 に答える