В UWP Xamarin.Forms, если у меня есть WebView
, свойство Source
которого установлено на тип UrlWebViewSource
, оно работает как положено. НО, если для свойства Source
задано значение HtmlWebViewSource
, где для свойства Html
задана строка, все <script>
в HTML обрабатываются дважды .
Я создал совершенно новый проект Xamarin.Forms, где Content
MainPage установлен в WebView в коде позади. Я настроил его так, чтобы я мог легко переключаться между установкой WebView.Source
на UrlWebViewSource
или HtmlWebViewSource
:
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;
}
Проблема в том, что сценарии выполняются дважды, возможно, по нескольким причинам, но по одной причине, если я добавляю контент в тело с помощью JavaScript, он будет добавлен дважды - , а не . хочу. Вот тестовый 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>
Когда я устанавливаю WebView.Source
для ввода UrlWebViewSource
, а для свойства Url
устанавливается значение https://htmlpreview.github.io/?https://github.com/joelbyrd/external-resources/blob/master/storefulfillment/Printing/Packing/GNC-Pick.htm",, я получаю следующий ожидаемый результат:
НО Когда я устанавливаю WebView.Source
для типа HtmlWebViewSource
, со свойством Html
, установленным в строку выше (пробелы вынуты и правильно экранированы), я получаю следующее:
Вы можете видеть, что "Тестирование" было добавлено в тело дважды. Это происходит только в UWP , поэтому я подозреваю, что это ошибка. Может кто-нибудь сказать мне, что здесь происходит, и если есть обходной путь?