Загрузка html-ресурса, хранящегося в Xamarin.Forms, в веб-просмотр

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

В идеале я хочу хранить свой html в файле на /assets/ в Xamarin.Forms вместо того, чтобы хранить его один раз для каждой ОС.

Я хочу иметь более простой способ и просто хранить актив в Xamarin.Forms. Это возможно?

Вы сталкиваетесь с той же проблемой, что и другой спрашивающий?

FreakyAli 28.11.2018 08:27

@ G.hakim: Нет, другой спрашивающий хочет решение, которое работает на Android This only needs to be done through Android so there is no worries about about IOS and Windows.. Я хочу уменьшить сложность для нескольких ОС.

Christian 28.11.2018 09:54

Итак, вы хотите кроссплатформенное решение для того же вопроса?

FreakyAli 28.11.2018 10:00

@ G.hakim: Да.

Christian 28.11.2018 10:03

Не могли бы вы рассказать немного о том, как хранится ваш HTML-ресурс? это как объект или как файл?

FreakyAli 28.11.2018 10:07

@ G.hakim: Хорошо, я отредактировал свой вопрос.

Christian 28.11.2018 10:55

Я добавил ответ в соответствии с моим пониманием вопроса, взгляните и дайте мне знать, если я что-то пропустил

FreakyAli 28.11.2018 11:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
951
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Что ж, если я прав, вы можете сделать это, используя встроенный файл в папке с активами, а затем прочитать его с помощью System.IO примерно так (при условии, что вы используете сборку NET Standard):

  • Добавьте файл, который вы хотите прочитать, в нужную папку в переносимом классе, а также убедитесь, что Действие сборки: EmbeddedResource.

  • Затем используйте GetManifestResourceStream для доступа к встроенному файлу с использованием его идентификатора ресурса. По умолчанию идентификатором ресурса является имя файла с префиксом пространства имен по умолчанию для проекта, в который он встроен - в данном случае сборка - WorkingWithFiles, а имя файла - PCLTextResource.txt. , поэтому идентификатор ресурса - WorkingWithFiles.PCLTextResource.txt. Теперь, чтобы получить желаемые данные файла, все, что вам нужно, это примерно так:

     var assembly = IntrospectionExtensions.GetTypeInfo(typeof(LoadResourceText)).Assembly;
     Stream stream = assembly.GetManifestResourceStream("WorkingWithFiles.PCLTextResource.txt");
     string text = "";
     using (var reader = new System.IO.StreamReader (stream)) {
     text = reader.ReadToEnd ();
     }
    

    Где LoadResourceText - это cs-файл, в котором я использую этот код для получения текущей сборки. Обратите внимание, что это должна быть та же сборка, в которой присутствует только что добавленный встроенный ресурс, а WorkingWithFiles.PCLTextResource.txt - это путь сборки для вашего встроенного ресурса, например: если имя вашей сборки - Foo, а ваш файл находится в папке с именем Asset, тогда ваш путь для этого было бы что-то вроде Foo.Asset.Your_File.txt

  • Как только вы закончите со всем этим, начинается легкая часть, на вашей странице WebView определите HtmlWebViewSource и назначьте его в качестве источника для ваших WebView и Vola! вы загрузили данные из файла в ваш файл.

        var browser = new WebView();
        var htmlSource = new HtmlWebViewSource();
        htmlSource.Html = ;//your html string here
        browser.Source = htmlSource;
    

Проверьте Как работать с файлами для получения дополнительной информации.

Что мне нужно импортировать для LoadResourceText?

Christian 29.11.2018 13:44

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

FreakyAli 29.11.2018 13:45
Ответ принят как подходящий

Я нашел способ заставить его работать:

В RightClickOnProject/Properties/Resources есть представление, позволяющее добавлять файлы, которые можно использовать в качестве ресурсов в Xamarin.Forms. Я добавил туда HtmlFile.txt-файл.

Я добавляю WebView в xaml через:

<ContentPage.Content>
    <StackLayout>
        <WebView x:Name = "Web" VerticalOptions = "FillAndExpand" />                     
    </StackLayout>
</ContentPage.Content>

Затем в коде программной части я делаю:

public partial class OurPage: ContentPage
{
    public OurPage()
    {
        InitializeComponent();

        Web.Source = new HtmlWebViewSource{Html = Properties.Resources.HtmlFile};
    }
}

Другие вопросы по теме