2012-10-15 54 views
5

我無法在LocalState目錄中獲取加載到網頁上的圖像。Windows 8 RT - 動態生成html不會呈現圖像

具體而言,當文件路徑引用LocalState目錄時,嘗試啓動網頁時似乎存在安全問題。

當我右鍵單擊該html文件並在Visual Studio中的瀏覽器中查看它時,該網頁會加載圖像。

我已經將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); 
} 
+0

您是否將HTML文件加載到WebView元素中? –

+0

您是使用WebView.Navigate還是WebView.NavigateTo方法加載HTML頁面? –

+0

public static async任務更新(WebView webview,IStorageFile文件) var html = await Windows.Storage.PathIO.ReadTextAsync(file.Path); webview.NavigateToString(html); } –

回答

2

的NavigateToString方法不具有指向在LocalData文件夾的圖像標籤的工作。 (據我所知,無論如何)。事實上,NavigateToString也會打破JavaScript和CSS鏈接。服務器上

圖片

一個解決辦法,就是改變你的源指向一個網絡服務器,而不是localdata。但我不確定它是否適用於您的應用場景。

圖像和HTML作爲內容

第二個選擇是你的HTML文件和圖像文件作爲內容添加到您的應用,並使用

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

加載HTML。

在處理HTTP服務器

下面是一個使用自定義HTTP服務器的應用程序來處理這些問題的解決方案。

Loading Local HTML Content in Metro WebView (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文件。

+0

這是MSDN論壇上討論一些可能性的主題。 http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/cbde9333-ba45-4b62-84f7-9f4c38ecbeb1 –

+0

我愛你!這工作。 –

+0

我臉紅了。 :> –