用于WebAssembly的UNO框架中的WebView所需的解决方法

时间:2019-04-16 08:38:51

标签: c# webview webassembly uno-platform

当前,我正在使用UNO平台应用程序,该应用程序应在WebView中显示动态创建的HTML代码。这在UWP和Android上工作正常,但在编译后的WebAssembly中却无法正常工作。我在这里可以使用某种解决方法吗?我想到了一个简单的IFRAME,但显然不可能在XAML文件中包含HTML。还是我错了?

更具体地说:WebView的NavigateToString("<html><head></head><body>BLAH!</body><html>")方法在UWP和Android(未测试iOS)中产生了预期的结果。

2 个答案:

答案 0 :(得分:3)

功能齐全的Webview很难做到:它与浏览器中的xss保护有关。

另一个原因仅仅是功能优先。 Wasm仍然是nventive(Uno平台背后的cie)的新目标,并且某些功能仍无法与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 :(得分:1)

您的代码示例几乎可以正常工作。进行少量调整,这是一个可行的解决方案:

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