Временное решение, необходимое для 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 -->
<h1>It works!</h1>
</ctl:WasmHtmlContentControl>
Может быть <![CDATA[
... ]]>
мог работать... никогда не пробовал.