JS/.NET interagieren auf Maui WebViewC#

Ein Treffpunkt für C#-Programmierer
Guest
 JS/.NET interagieren auf Maui WebView

Post by Guest »

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):

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 
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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post