Временное решение, необходимое для WebView в UNO Framework для WebAssembly - PullRequest
3 голосов
/ 16 апреля 2019

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

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

Ответы [ 2 ]

3 голосов
/ 16 апреля 2019

Полнофункциональный веб-просмотр не может быть легко выполнен: он связан с защитой 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[ ... ]]> мог бы работать ... никогда не пробовал.

1 голос
/ 18 апреля 2019

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

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}" />
...