Временное решение, необходимое для WebView в UNO Framework для WebAssembly

В настоящее время я работаю над приложением платформы UNO, которое должно отображать динамически созданный HTML-код в WebView, Это работает нормально на UWP и Android, но не в скомпилированном WebAssembly, Есть ли какое-то решение, которое я мог бы использовать здесь? Я думал о простом IFRAME, но, очевидно, нет возможности включить HTML в файл XAML. Или я не прав?

Чтобы быть более конкретным: WebView's NavigateToString("<html><head></head><body>BLAH!</body><html>") Метод приводит к желаемым результатам в UWP и Android (iOS не тестировалась).

2 ответа

Решение

Ваш пример кода почти сработал. С небольшими изменениями это рабочее решение:

using System;
using System.Collections.Generic;
using System.Text;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Markup;

namespace MyProjectNamespace
{
    [ContentProperty(Name = nameof(HtmlContent))]
    public class WebAssemblyHtmlControl : Control
    {
        public WebAssemblyHtmlControl()
         : base(htmlTag: "div") // the root HTML tag of your content
        {
        }

        private string _html;

        public string HtmlContent
        {
            get => _html;
            set
            {
                base.SetHtmlContent(value); // this is a protected method on Wasm target   
                _html = value;
            }
        }
    }
}

И в XAML:

<WebAssemblyHtmlControl HtmlContent="{Binding HtmlString}" />

Полнофункциональный веб-просмотр не может быть легко выполнен: он связан с защитой XSS в браузерах.

Другая причина - просто определение приоритетов. Wasm по-прежнему является новой целью для nventive (основа платформы Uno), а некоторые функции все еще отсутствуют, чтобы достичь паритета с iOS и Android. Об этом, пожалуйста, откройте вопрос на github и объясните, чего вам не хватает.

Но вы все еще можете сделать что-то. Вы можете создать собственный элемент управления в своем приложении следующим образом:

  [ContentProperty(nameof(HtmlContent))]
  public class WasmHtmlContentControl : Control
  {
    public WasmHtmlContentControl()
     : base(htmlTag: "div") // the root HTML tag of your content
    {
    }

    private string _html;

    public string HtmlContent
    {
      get => _html;
      set
      {
        base.SetHtmlContent(html); // this is a protected method on Wasm target
        _html = value;
      }
    }
  }

И XAML:

  <ctl:WasmHtmlContentControl>
    <!-- xml encoded html -->
    &lt;h1&gt;It works!&lt;/h1&gt;
  </ctl:WasmHtmlContentControl>

Может быть <![CDATA[... ]]> мог работать... никогда не пробовал.

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