Чтение значений HTML из элемента управления HtmlWebViewSource в формах Xamarin - PullRequest
0 голосов
/ 23 ноября 2018

У нас есть веб-приложение и приложение для мобильных устройств, которое генерирует динамический опросник с использованием HTML.Это позволяет нам создавать самые разные вопросы (текстовые поля, выпадающие списки, даты, переключатели).В настоящее время мы перестраиваем наше приложение, используя Xamarin Forms , и хотели бы повторно использовать существующий код, который генерирует этот вопросник.Кроме того, не все необходимые нам элементы управления реализованы в Xamarin .

. До сих пор мне удалось создать анкету в Xamarin с использованием WebView .Это работает отлично.Когда пользователь отправляет анкету, я могу получить HTML-код из WebView .Проблема в том, что HTML не показывает ни одного ответа пользователя на вопросы.Например, если пользователь ввел ответ в одно из текстовых полей, его нет нигде в HTML, возвращаемом из элемента управления WebView .

Вот как ясоздание вопросника HTML.

StringBuilder htmlString = new StringBuilder();
//build up my HTML string here
htmlString.Append("<div>.....");

var htmlWebView = new HtmlWebViewSource { Html = htmlString.ToString() };
WebView.Source = htmlWebView;

В случае нажатия кнопки отправки я получаю HTML-код из элемента управления WebView следующим образом.

var webViewSource = WebView.Source;
var htmlString = (string) WebViewSource.GetValue(HtmlWebViewSource.HtmlProperty);

Iможет загружать и извлекать HTML из WebView .Но как мне вернуть ответы пользователя?

ОБНОВЛЕНИЕ

Я могу добавить очень простые функции Javascript в мой HTML WebView следующим образом.Это просто возвращает 100.

private static string GetJavascriptFunction()
{
    StringBuilder htmlString = new StringBuilder();
    htmlString.Append("<html>");
    htmlString.Append("<body>");
    htmlString.Append("<script type=\"text/javascript\">");
    htmlString.Append("function getValue() {");
    htmlString.Append("return 100;");
    htmlString.Append("}");
    htmlString.Append("</script>");
    return htmlString.ToString();
}

При правильном вызове функции возвращается 100.

string result = await WebView.EvaluateJavaScriptAsync("getValue()");

Однако, если я хочу, чтобы Javascript выполнял любые манипуляции с DOM, он всегда просто возвращаетNULL.

private static string GetJavascriptFunction()
{
    StringBuilder htmlString = new StringBuilder();
    htmlString.Append("<html>");
    htmlString.Append("<body>");
    htmlString.Append("<script type=\"text/javascript\">");
    htmlString.Append("function getValue() {");
    htmlString.Append("return document.body.innerHTML;");
    htmlString.Append("}");
    htmlString.Append("</script>");
    return htmlString.ToString();
}

Теперь возвращается NULL.

Есть ли способ использовать Javascript для возврата значений из HTML в элементе управления WebView ?

1 Ответ

0 голосов
/ 27 ноября 2018

После нескольких неудачных попыток мне удалось заставить это работать.Вот функции, которые я использовал для получения ответов от пользователя из WebView.

private async Task<string> GetValueFromTextbox(string controlId)
{
    return await WebView.EvaluateJavaScriptAsync($"document.getElementById('{controlId}').value;");
}
private async Task<string> GetValueFromCheckbox(string controlId)
{
    return await WebView.EvaluateJavaScriptAsync($"document.getElementById('{controlId}').checked;");
}
private async Task<string> GetValueFromRadioButton(string controlname)
{
    return await WebView.EvaluateJavaScriptAsync($"document.querySelector(\'input[name=\"{controlname}\"]:checked\').value;");
}
private async Task<string> GetValueFromDropdownn(string controlId)
{
    return await WebView.EvaluateJavaScriptAsync($"document.getElementById(\'{controlId}\').options[document.getElementById(\'{controlId}\').selectedIndex].text;");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...