WebView.Navigate показывает только белый экран

WebView.Navigate(URI) не загружает html-файл, на который указывает мой uri. PathToIndex взят из StorageFile.Path.

private static readonly Uri HomeUri = new Uri("ms-appx-web:///" + PathToIndex, UriKind.Absolute);

HTML-код, который я хочу загрузить, взят из Zip-файла, который я распаковал ранее.
Есть предложения?

РЕДАКТИРОВАТЬ ответ Джоги: вот где я распаковал zip-файл:

var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
var unpackFolder = await localFolder.CreateFolderAsync(appName+"unzip", CreationCollisionOption.ReplaceExisting);

затем я сохраняю путь index.html с помощью StorageFile.Path.
Я пробовал ms-appdata, но получаю исключение value does not fall within the expected range
Я могу перебирать все файлы с помощью

var files = await unpackFolder.GetFilesAsync();
foreach(var file in files)
{
   string name = file.Path;
}


с помощью NavigateToString я также вижу HTML-файл, но javascript и css по-прежнему не работают.


person B. Kemmer    schedule 15.09.2014    source источник
comment
Куда вы распаковали zip-архив? Если он находится в папке данных приложения, пробовали ли вы использовать ms-appdata:///local/ в качестве начала uri?   -  person Jogy    schedule 15.09.2014
comment
Значение переменной StorageFile.Path равно C:/Data/Users/DefApps/APPDATA/Local/Packages/cd0b1e93-4db9-4f31-ae6a-6d606d6b9e71_n2dsc9ch8qzm0/LocalState/JavaBridgeTestunzip/index.html.   -  person B. Kemmer    schedule 15.09.2014


Ответы (3)


ms-appx-web не подойдет, так как его можно использовать только для загрузки ресурсов из пакета приложения.

Я попробовал ms-appdata, а затем искал документация и оказывается, что:

WebView не поддерживает схему ms-appdata, хотя и поддерживает схему ms-appx-web, которую можно использовать для загрузки файлов содержимого из пакета приложения.

Обходной путь — прочитать содержимое файла в виде строки, а затем использовать WebView.NavigateToString(). Вы также можете изучить NavigateToLocalStreamUri(), если у вас есть внешние ресурсы для html.

person Jogy    schedule 15.09.2014
comment
да, я уже пробовал метод NavigateToLocalStreamUri(), но не получил IUriToStreamResolver и не смог найти никакой помощи. Вероятно, придется немного погуглить, чтобы заставить его работать. Спасибо за вашу помощь - person B. Kemmer; 15.09.2014

Это поможет вам... https://code.msdn.microsoft.com/windowsapps/XAML-WebView-control-sample-58ad63f7/

Мой пример:

StorageFolder d = await ApplicationData.Current.LocalFolder.CreateFolderAsync("folder", CreationCollisionOption.OpenIfExists);
StorageFile f = await d.CreateFileAsync("index.html", CreationCollisionOption.ReplaceExisting);
Stream str = await f.OpenStreamForWriteAsync();
using (StreamWriter sw = new StreamWriter(str))
{
  sw.Write("<html>...</html>");
}
string url = "ms-appdata:///local/folder/index.html";
webView1.Navigate(new Uri(url));
person NeoSvet    schedule 17.05.2015

Чтобы уточнить ответ NeoSvet: ms-appdata работает только в том случае, если вы храните свой html-файл в подпапке LocalFolder, но не в корне, например: "ms-appdata:///local/[subfolder_name]/index.html".

Причины этого подробно описаны здесь, вкратце: это сделано для обеспечения определенного уровня изоляции веб-контента и для того, чтобы WebView случайно не открывал другой контент в ваша локальная папка.

person Andrei Ashikhmin    schedule 08.08.2016