当前,我正在使用UNO平台应用程序,该应用程序应在WebView
中显示动态创建的HTML代码。这在UWP和Android上工作正常,但在编译后的WebAssembly
中却无法正常工作。我在这里可以使用某种解决方法吗?我想到了一个简单的IFRAME
,但显然不可能在XAML文件中包含HTML。还是我错了?
更具体地说:WebView的NavigateToString("<html><head></head><body>BLAH!</body><html>")
方法在UWP和Android(未测试iOS)中产生了预期的结果。
答案 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 -->
<h1>It works!</h1>
</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}" />