Установка BaseUrl для файлов, загруженных из Environment.SpecialFolder.LocalApplicationData - PullRequest
0 голосов
/ 02 февраля 2019

Вероятно, это должно быть просто, но у меня болит голова.По сути, я создаю приложение, которое загружает zip-файл, содержащий html, css, javascript и т. Д. Он распаковывает содержимое и сохраняет его в LocalApplicationData, загружает index.html в веб-просмотр, например:

HtmlWebViewSource html = new HtmlWebViewSource();

html.Html = htmlString;
html.BaseUrl = DependencyService.Get().Get();
courseWindow.Source = html;

Все это прекрасно работает, за исключением того, что я заканчиваю неформатированный html, сценарии не выполняются и т. Д. Я предполагаю, что это связано с baseURL, но может ли это быть что-то еще, например, ресурсы заблокированы от загрузки?

Если кто-то сталкивался с той же проблемой или мог бы указать мне правильное направление, это было бы замечательно.

Вот что я имею в своем проекте Android.

[assembly: Dependency(typeof(BaseUrl))]
namespace TCMobile.Droid
{
    public class BaseUrl : iBaseURL
    {
        public string Get()
        {
            return "file:/" + System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData);
        }
    }
}

Я также пытался жестко указать путь к точному каталогу, из которого загружается html.

[assembly: Dependency(typeof(BaseUrl))]
namespace TCMobile.Droid
{
    public class BaseUrl : iBaseURL
    {
        public string Get()
        {
            return "file:/" + System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData) +
                "Courses/2d7d0a7d-145a-41d0-9abf-685a2b5dfc3c/Online_Placement_Test_no_timer_pack/YKZOP4NACH3EPJNTG6M4T2BQDI/Unit_4_5/995/";
        }}
    }

С точками останова я вижу возвращенный путь, и он выглядит нормально.

В качестве теста я попытался передать строку html с помощью iframe, источником которого был мой локальный html.Это загрузило HTML нормально, но дало мне кучу междоменных проблем с js.Потому что кадры должны взаимодействовать друг с другом.Если бы я мог обойти проблемы безопасности с помощью iframe, я бы согласился с таким подходом.

После того, как я еще больше возлюсь, я вижу эту странность.

Так что это странно.В iOS это то, что я вижу

URL файла - выглядит отлично

file: /// var / mobile / Containers / Data / Application / 04BFAB43-2D92-48D3-941D-C48C8686E0A5/Documents/Courses/2d7d0a7d-145a-41d0-9abf-685a2b5dfc3c/Online_Place_Test_no_timer_pack/YKZOP4NACH3EPJNTG6M4T2BQDI/Unit_4_5/99/// */ Контейнеры / Данные / Приложение / 04BFAB43-2D92-48D3-941D-C48C8686E0A5 / Документы / Курсы / 2d7d0a7d-145a-41d0-9abf-685a2b5dfc3c / Online_Placement_Test_no_timer_pack / YKZOP4NACH6 * J2_JD_TF_DF_D_W_D_W_S_F_S_W_S_W_W_S_ * * *- странно, обратите внимание, как добавляется имя файла HTML.Теперь этого не происходит, поскольку

file: /// var / mobile / Containers / Data / Application / 04BFAB43-2D92-48D3-941D-C48C8686E0A5 / Документы / Курсы / 2d7d0a7d-145a-41d0-9abf-685a2b5dfc3c /Online_Placement_Test_no_timer_pack / YKZOP4NACH3EPJNTG6M4T2BQDI / Unit_4_5 / 995 / Unit.html / JS / bootstrap.min.js

1 Ответ

0 голосов
/ 02 февраля 2019

Я полагаю, у вас есть служба зависимостей из WebView документов , поэтому вы пытаетесь настроить BaseUrl правильно и по-разному для каждой платформы.

Можете ли вы поделиться своим кодом для службы зависимостей?Вам нужно будет внести некоторые изменения из sample , поскольку предполагается, что ваш html, css, javascript находится в статических ресурсах приложения.Вместо этого вы захотите вернуть путь к месту, где вы их сохранили.

...