JS/.NET interagieren auf Maui WebView
Posted: 09 Feb 2025, 10:21
Ich migriere unsere App von Xamarin nach Maui und kämpfe ein bisschen damit, den Code zu migrieren, der JS/.NET -Interaktionen in einem Webview sowohl auf Android als auch auf iOS behandelt. Konzentrieren wir uns auf Android. Es geht insbesondere darum, .NET -Code von JS in der WebView zu rufen. -Us/xamarin/xamarin-forms/app-fundamentals/benutzerdefinierte renderer/hybridwebview):
nie aufgerufen. Das Fehlen von Beispielen macht es schwierig, herauszufinden, was ich vermisse. < /P>
Microsoft.Maui.Handlers.WebViewHandler.Mapper.AppendToMapping("MyCustomization", (handler, view) =>
{
#if ANDROID
handler.PlatformView.SetWebViewClient(new JavascriptWebViewClient($"javascript: {JavascriptFunction}"));
handler.PlatformView.AddJavascriptInterface(new JsBridge(this), "jsBridge");
#endif
});
< /code>
mit < /p>
public class JavascriptWebViewClient : WebViewClient
{
private readonly string javascript;
public JavascriptWebViewClient(string javascript) : base()
{
this.javascript = javascript;
}
public override void OnPageFinished(WebView view, string url)
{
base.OnPageFinished(view, url);
view.EvaluateJavascript(javascript, null);
}
}
< /code>
Wo soll ich diesen Code einfügen? Ist das der richtige Weg? Was vermisse ich? Ich habe dies jetzt in eine unterklassige Webview eingelegt, aber wahrscheinlich ist das nicht der richtige Weg.
Code: Select all
protected override void OnElementChanged(ElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (e.OldElement != null)
{
Control.RemoveJavascriptInterface("jsBridge");
}
if (e.NewElement != null)
{
Control.SetWebViewClient(new JavascriptWebViewClient(this, $"javascript: {JavascriptFunction}"));
Control.AddJavascriptInterface(new JsBridge(this), "jsBridge");
}
}
< /code>
und < /p>
public class JavascriptWebViewClient : FormsWebViewClient
{
private readonly string javascript;
public JavascriptWebViewClient(HybridWebViewRenderer renderer, string javascript) : base(renderer)
{
this.javascript = javascript;
}
public override void OnPageFinished(WebView view, string url)
{
base.OnPageFinished(view, url);
view.EvaluateJavascript(javascript, null);
}
}
< /code>
In .NET 6 Mit Maui ist dies veraltet. Ich habe versucht, es mit Handlern zu bauen, aber dann wird der OnceFinedishis
Microsoft.Maui.Handlers.WebViewHandler.Mapper.AppendToMapping("MyCustomization", (handler, view) =>
{
#if ANDROID
handler.PlatformView.SetWebViewClient(new JavascriptWebViewClient($"javascript: {JavascriptFunction}"));
handler.PlatformView.AddJavascriptInterface(new JsBridge(this), "jsBridge");
#endif
});
< /code>
mit < /p>
public class JavascriptWebViewClient : WebViewClient
{
private readonly string javascript;
public JavascriptWebViewClient(string javascript) : base()
{
this.javascript = javascript;
}
public override void OnPageFinished(WebView view, string url)
{
base.OnPageFinished(view, url);
view.EvaluateJavascript(javascript, null);
}
}
< /code>
Wo soll ich diesen Code einfügen? Ist das der richtige Weg? Was vermisse ich? Ich habe dies jetzt in eine unterklassige Webview eingelegt, aber wahrscheinlich ist das nicht der richtige Weg.