2012-10-15 10 views
5

Nie mogę pobrać obrazów załadowanych na stronie internetowej w katalogu LocalState.Windows 8 RT - Dynamiczne generowanie html nie renderuje obrazów

Wygląda na to, że pojawia się problem z bezpieczeństwem podczas próby uruchomienia strony internetowej, gdy ścieżka do pliku odwołuje się do katalogu LocalState.

Strona ładuje się z obrazami po kliknięciu pliku HTML prawym przyciskiem myszy i wyświetleniu go w przeglądarce w programie Visual Studio.

Zmieniono ścieżkę znacznika src na: src = "ms-appdata: ///Local/Logo.jpeg" To nie działa.

Help me ...

Przykład kodu

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

Czy ładujesz plik HTML do elementu WebView? –

+0

Czy używasz metod WebView.Navigate lub WebView.NavigateTo do załadowania strony HTML? –

+0

Publiczna aktualizacja asynchronicznej statycznej asynchronizacji (Webview webview, plik IStorageFile) { var html = czeka na Windows.Storage.PathIO.ReadTextAsync (file.Path); webview.NavigateToString (html); } –

Odpowiedz

2

Sposób NavigateToString nie działa ze znacznikami, które wskazują na obrazy w folderze LocalData. (o ile w ogóle pamiętam). W rzeczywistości NavigateToString również łamie linki JavaScript i CSS.

Obrazy na serwerze

jedno rozwiązanie, aby zmienić swoje źródło wskazywać na serwerze sieciowym zamiast localdata. Nie jestem pewien, czy to działa w twoim scenariuszu aplikacji.

obrazy i HTML jak zawartość

Drugim wyborem jest dodanie kodu HTML i plików graficznych jako zawartość do aplikacji i korzystać

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

załadować HTML.

w Procesie HTTP Server

Oto rozwiązanie, które wykorzystuje serwer HTTP niestandardowego w aplikacji do obsługi zagadnień.

Loading Local HTML Content in Metro WebView (Windows 8)

bazowa 64 zakodowany obraz

Wreszcie nie ma innego rozwiązania pomocą Base64 kodowanie obrazów w folderze LocalData.

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); 
} 

To ostatnie podejście działa dla zdjęć, ale nie dla plików CSS.

+0

Oto wątek na forum MSDN, który omawia pewne możliwości. http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/cbde9333-ba45-4b62-84f7-9f4c38ecbeb1 –

+0

KOCHAM CIĘ! To działa. –

+0

Zarumieniam się. :> –

Powiązane problemy