我们有一个使用HTML生成动态问卷的Web和移动应用程序。这使我们能够创建各种各样的问题(文本框,下拉菜单,日期,单选按钮)。我们目前正在使用Xamarin Forms重新构建我们的应用程序,并希望重用生成此问卷的现有代码。此外,并非我们需要的所有控件都在Xamarin中实现。
我已经成功在Xamarin中使用WebView生成问卷。这个方法完美地工作。当用户提交问卷时,我可以从WebView中检索HTML。问题是HTML不显示用户输入的任何响应。例如,如果用户在其中一个文本字段中键入了响应,则无法在从WebView控件返回的HTML中找到该响应。
以下是我如何创建HTML问卷的方式。
在提交按钮的点击事件中,我像这样从 WebView 控件中检索HTML。
我可以上传并检索来自 WebView 的HTML。但是我如何返回用户的响应?
以下正确调用函数可以返回100。
然而,如果我想让Javascript进行任何类型的DOM操作,它总是返回null。
我已经成功在Xamarin中使用WebView生成问卷。这个方法完美地工作。当用户提交问卷时,我可以从WebView中检索HTML。问题是HTML不显示用户输入的任何响应。例如,如果用户在其中一个文本字段中键入了响应,则无法在从WebView控件返回的HTML中找到该响应。
以下是我如何创建HTML问卷的方式。
StringBuilder htmlString = new StringBuilder();
//build up my HTML string here
htmlString.Append("<div>.....");
var htmlWebView = new HtmlWebViewSource { Html = htmlString.ToString() };
WebView.Source = htmlWebView;
在提交按钮的点击事件中,我像这样从 WebView 控件中检索HTML。
var webViewSource = WebView.Source;
var htmlString = (string) WebViewSource.GetValue(HtmlWebViewSource.HtmlProperty);
我可以上传并检索来自 WebView 的HTML。但是我如何返回用户的响应?
更新
我可以向我的 WebView 的HTML添加非常简单的Javascript函数,如下所示。 这个函数只返回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从WebView控件中返回HTML的值?