从 Xamarin 混合 Web 视图打开签名板



我已经使用JSBridge在混合Web View和c#操作之间创建了桥梁,并且工作正常。

我正在尝试根据参数调用签名板视图,并希望在 HTML 页面内的图像元素中加载签名。

public class JSBridge: Java.Lang.Object {
   readonly WeakReference < HybridWebViewRenderer > hybridWebViewRenderer;
   WebView _webView;
   public JSBridge(HybridWebViewRenderer hybridRenderer, WebView webView) {
    hybridWebViewRenderer = new WeakReference < HybridWebViewRenderer > (hybridRenderer);
    _webView = webView;
   }
   [JavascriptInterface]
   [Export("invokeAction")]
   public async void InvokeAction(string data) {
     if (data == "OpenSignaturePad") {
      var signatureView = new SignaturePadView() {
       StrokeWidth = 3 f,
        StrokeColor = Color.White,
        BackgroundColor = Color.Black
      };
      var bitmap = signatureView.GetImageStreamAsync(SignatureImageFormat.Png);
      var url = ImageToBase64(bitmap);
      Xamarin.Forms.Device.BeginInvokeOnMainThread(async () => {
       _webView.EvaluateJavascript("document.getElementById('imgTest').src='" + url + "'", null);
      });
     }

我不确定如何在当前视图之上调用signatureView。有什么想法吗?

根据您的描述,您希望从 hybridwebview 获取本地签名板视图, 您可以创建一个包含要从 JavaScript 调用的方法的 C# 类,

class MyJSInterface : Java.Lang.Object
{
Context context;
public MyJSInterface (Context context)
{
    this.context = context;
}
public void ShowToast ()
{
    Toast.MakeText(context, "url from signature pad", ToastLength.Short).Show();
}

}

然后调用 JS:

<button type="button" onClick="CSharp.ShowToast ('Call C#')">Call C#</button>

你可以看看下面的文章:

https://github.com/xamarin/docs-archive/tree/master/Recipes/android/controls/webview/call_csharp_from_javascript

最新更新