从Xamarin混合Web视图打开签名板
我使用JSBridge在混合Web视图和c#Action之间创建了一座桥梁,效果很好 我试图根据参数调用signature pad视图,并希望在HTML页面内的image元素中加载签名从Xamarin混合Web视图打开签名板,xamarin,xamarin.forms,xamarin.android,Xamarin,Xamarin.forms,Xamarin.android,我使用JSBridge在混合Web视图和c#Action之间创建了一座桥梁,效果很好 我试图根据参数调用signature pad视图,并希望在HTML页面内的image元素中加载签名 public class JSBridge: Java.Lang.Object { readonly WeakReference < HybridWebViewRenderer > hybridWebViewRenderer; WebView _webView; public JS
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);
});
}
公共类JSBridge:Java.Lang.Object{
只读WeakReferenceHybridWebViewRenderer;
网络视图(WebView),;
公共JSBridge(HybridWebViewRenderer hybridRenderer,WebView WebView){
hybridWebViewRenderer=新的WeakReference(hybridRenderer);
_网络视图=网络视图;
}
[JavascriptInterface]
[导出(“调用”)]
公共异步void InvokeAction(字符串数据){
如果(数据==“OpenSignaturePad”){
var signatureView=新SignaturePadView(){
冲程宽度=3 f,
StrokeColor=颜色。白色,
背景颜色=颜色。黑色
};
var bitmap=signatureView.GetImageStreamAsync(SignatureImageFormat.Png);
var url=ImageToBase64(位图);
Xamarin.Forms.Device.BeginInvokeMainThread(异步()=>{
_EvaluateJavascript(“document.getElementById('imgTest').src=”+url+”,null);
});
}
我不知道如何在当前视图上调用
signatureView
。有什么想法吗?根据您的描述,如果要从hybridwebview获取本地签名板视图,可以创建一个C类,其中包含从JavaScript调用的方法
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>
呼叫C#
您可以查看以下文章: