最近,我收到了在 .NET MAUI 中的 shell 应用程序和网页之间创建双向互操作桥的任务。没有找到任何方法来解决这个问题,我首先想到在 Xamarin.Forms 中创建它,因为 MAUI 是它的延续。
创建此应用程序后,我尝试使用 dotnet/maui github wiki 上的 Microsoft 说明将其转换为 MAUI。
我现在遇到的主要问题是我一直在 Android 的WebViewRenderer、WebViewClient和Java.Lang.Object上使用扩展,以便能够向 WebView 发送和接收 javascript。
public class ExtendedWebViewRenderer : WebViewRenderer
{
private const String JavascriptFunction = "function invokeCSharpAction(data){jsBridge.invokeAction(data);}";
public ExtendedWebViewRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
{
base.OnElementChanged(e);
if (e.OldElement != null)
{
Control.RemoveJavascriptInterface("jsBridge");
((ExtendedWebView)Element).Cleanup();
}
if (e.NewElement != null)
{
Control.SetWebViewClient(new JavascriptWebViewClient($"javascript: {JavascriptFunction}"));
Control.AddJavascriptInterface(new JsBridge(this), "jsBridge");
}
}
}
public …Run Code Online (Sandbox Code Playgroud)