在Xamarin.Forms UWP中,如果我WebView
的{{1}}属性设置为Source
,则按预期工作。但是,如果将UrlWebViewSource
属性设置为键入Source
,其中HtmlWebViewSource
属性设置为字符串,则HTML中的任何Html
都将被处理两次
我已经建立了一个全新的Xamarin.Forms项目,其中MainPage的<script>
设置为代码隐藏中的WebView。我已对其进行了设置,以便在设置Content
到WebView.Source
或UrlWebViewSource
之间轻松切换:
HtmlWebViewSource
问题是脚本执行两次,可能有几个原因,但对于一个问题,如果我使用JavaScript将内容附加到正文,那么它将被追加两次 - not 我想要什么。这是我使用的测试HTML代码:
public MainPage()
{
InitializeComponent();
var urlSource = new UrlWebViewSource { Url = "https://htmlpreview.github.io/?https://github.com/joelbyrd/external-resources/blob/master/storefulfillment/Printing/Packing/GNC-Pick.htm" };
var htmlStringSource = new HtmlWebViewSource
{
Html = @"<!doctype html><html lang='en'><head><meta charset='utf-8'><meta http-equiv='x-ua-compatible' content='ie=edge'><meta name='viewport' content='width=device-width, initial-scale=1'><title>Test</title></head><body><div id='log'></div><p>some text</p><script>document.getElementById('log').innerHTML += `<p>Testing</p>`;</script></body></html>"
};
var webView = new WebView
{
Margin = new Thickness(0, 20, 0, 0),
Source = urlSource, // displays as expected
//Source = htmlStringSource // <script>'s are processed twice, appending "Testing" to the body twice
};
Content = webView;
}
当我将<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Test</title>
</head>
<body>
<div id="log"></div>
<p>some text</p>
<script>
document.getElementById('log').innerHTML += `<p>Testing</p>`;
</script>
</body>
</html>
设置为WebView.Source
,并将UrlWebViewSource
属性设置为&#34; https://htmlpreview.github.io/?https://github.com/joelbyrd/external-resources/blob/master/storefulfillment/Printing/Packing/GNC-Pick.htm&#34;时,我得到以下预期输出:
但是当我将Url
设置为WebView.Source
时,HtmlWebViewSource
属性设置为上面的字符串(空格被取出并正确转义),我得到以下内容:
你可以看到&#34;测试&#34;已被添加到身体两次。这个只发生在UWP 中,所以我怀疑这是一个错误。任何人都可以告诉我这里发生了什么,以及是否有解决方法?