Hello,
Welcome to our Microsoft Q&A platform!
I transfer Json data in the custom renderer. Before I pass the string to the evaluateJavascript method, I replace the \
to \\\
with string unescaped = jsonString.Replace("\"", "\\\"");
.
And I transfer json data to the webview in OnPageFinished
for testing.
internal class MyWebViewClient : WebViewClient
{
public override void OnPageFinished(Android.Webkit.WebView view, string url)
{
base.OnPageFinished(view, url);
MyViewModel viewModel = new MyViewModel();
string jsonString = System.Text.Json.JsonSerializer.Serialize(viewModel);
string unescaped = jsonString.Replace("\"", "\\\"");
view.EvaluateJavascript("javascript: " + "updateFromAndroid1(\"" + unescaped + "\")", null);
}
}
My html page just have a JavaScript method called updateFromAndroid1(message)
to push a alert window for testing.
Here is my custom renderer code. I create MyViewModel
for testing. And I install System.Text.Json
nuget package for Json Serializer。
[assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))]
namespace WebviewInvokeJS.Droid
{
public class MyViewModel
{
public string MyProperty { get; set; }
public MyViewModel()
{
MyProperty = "Name";
}
}
public class HybridWebViewRenderer : WebViewRenderer
{
Context _context;
public HybridWebViewRenderer(Context context) : base(context)
{
_context = context;
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (Control != null)
{
Control.Settings.JavaScriptEnabled = true;
Control.LoadUrl("file:///android_asset/table.html");
Control.SetWebViewClient(new MyWebViewClient());
}
base.OnElementPropertyChanged(sender, e);
}
}
internal class MyWebViewClient : WebViewClient
{
public override void OnPageFinished(Android.Webkit.WebView view, string url)
{
base.OnPageFinished(view, url);
MyViewModel viewModel = new MyViewModel();
string jsonString = System.Text.Json.JsonSerializer.Serialize(viewModel);
string unescaped = jsonString.Replace("\"", "\\\"");
view.EvaluateJavascript("javascript: " + "updateFromAndroid1(\"" + unescaped + "\")", null);
}
}
}
Best Regards,
Leon Lu
If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.