Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Android.App;
- using Android.Content;
- using Android.OS;
- using Android.Runtime;
- using Android.Views;
- using Android.Webkit;
- using Android.Widget;
- using FormsWebViewTest;
- using FormsWebViewTest.Droid;
- using Java.Interop;
- using Xamarin.Forms.Platform.Android;
- [assembly: Xamarin.Forms.ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))]
- namespace FormsWebViewTest.Droid
- {
- public class HybridWebViewRenderer : ViewRenderer<HybridWebView, Android.Webkit.WebView>
- {
- const string JavascriptFunction = "function invokeCSharpAction(data){jsBridge.invokeAction(data);}";
- Context _context;
- public HybridWebViewRenderer(Context context) : base(context)
- {
- _context = context;
- }
- protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e)
- {
- base.OnElementChanged(e);
- if (Control == null)
- {
- var webView = new Android.Webkit.WebView(_context);
- webView.Settings.JavaScriptEnabled = true;
- webView.Settings.DomStorageEnabled = true;
- //webView.SetWebViewClient(new JavascriptWebViewClient($"javascript: {JavascriptFunction}"));
- webView.SetWebViewClient(new WebViewClient());
- webView.SetWebChromeClient(new WebChromeClient());
- webView.SetBackgroundColor(Android.Graphics.Color.Transparent);
- SetNativeControl(webView);
- }
- if (e.OldElement != null)
- {
- //Control.RemoveJavascriptInterface("jsBridge");
- var hybridWebView = e.OldElement as HybridWebView;
- hybridWebView.Cleanup();
- }
- if (e.NewElement != null)
- {
- //Control.AddJavascriptInterface(new JSBridge(this), "jsBridge");
- Control.LoadUrl(Element.Uri);
- //Control.LoadUrl($"file:///android_asset/Content/{Element.Uri}");
- }
- }
- }
- public class JavascriptWebViewClient : WebViewClient
- {
- string _javascript;
- public JavascriptWebViewClient(string javascript)
- {
- _javascript = javascript;
- }
- public override void OnPageFinished(WebView view, string url)
- {
- base.OnPageFinished(view, url);
- view.EvaluateJavascript(_javascript, null);
- }
- }
- public class JSBridge : Java.Lang.Object
- {
- readonly WeakReference<HybridWebViewRenderer> hybridWebViewRenderer;
- public JSBridge(HybridWebViewRenderer hybridRenderer)
- {
- hybridWebViewRenderer = new WeakReference<HybridWebViewRenderer>(hybridRenderer);
- }
- [JavascriptInterface]
- [Export("invokeAction")]
- public void InvokeAction(string data)
- {
- HybridWebViewRenderer hybridRenderer;
- if (hybridWebViewRenderer != null && hybridWebViewRenderer.TryGetTarget(out hybridRenderer))
- {
- hybridRenderer.Element.InvokeAction(data);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment