Guest User

Untitled

a guest
Dec 3rd, 2018
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.72 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. using Android.App;
  7. using Android.Content;
  8. using Android.OS;
  9. using Android.Runtime;
  10. using Android.Views;
  11. using Android.Webkit;
  12. using Android.Widget;
  13. using FormsWebViewTest;
  14. using FormsWebViewTest.Droid;
  15. using Java.Interop;
  16. using Xamarin.Forms.Platform.Android;
  17.  
  18. [assembly: Xamarin.Forms.ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))]
  19. namespace FormsWebViewTest.Droid
  20. {
  21.     public class HybridWebViewRenderer : ViewRenderer<HybridWebView, Android.Webkit.WebView>
  22.     {
  23.         const string JavascriptFunction = "function invokeCSharpAction(data){jsBridge.invokeAction(data);}";
  24.         Context _context;
  25.  
  26.         public HybridWebViewRenderer(Context context) : base(context)
  27.         {
  28.             _context = context;
  29.         }
  30.  
  31.         protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e)
  32.         {
  33.             base.OnElementChanged(e);
  34.  
  35.             if (Control == null)
  36.             {
  37.                 var webView = new Android.Webkit.WebView(_context);
  38.                 webView.Settings.JavaScriptEnabled = true;
  39.                 webView.Settings.DomStorageEnabled = true;
  40.                 //webView.SetWebViewClient(new JavascriptWebViewClient($"javascript: {JavascriptFunction}"));
  41.                 webView.SetWebViewClient(new WebViewClient());
  42.                 webView.SetWebChromeClient(new WebChromeClient());
  43.                 webView.SetBackgroundColor(Android.Graphics.Color.Transparent);
  44.                 SetNativeControl(webView);
  45.             }
  46.             if (e.OldElement != null)
  47.             {
  48.                 //Control.RemoveJavascriptInterface("jsBridge");
  49.                 var hybridWebView = e.OldElement as HybridWebView;
  50.                 hybridWebView.Cleanup();
  51.             }
  52.             if (e.NewElement != null)
  53.             {
  54.                 //Control.AddJavascriptInterface(new JSBridge(this), "jsBridge");
  55.                 Control.LoadUrl(Element.Uri);
  56.                 //Control.LoadUrl($"file:///android_asset/Content/{Element.Uri}");
  57.             }
  58.         }
  59.     }
  60.  
  61.     public class JavascriptWebViewClient : WebViewClient
  62.     {
  63.         string _javascript;
  64.  
  65.         public JavascriptWebViewClient(string javascript)
  66.         {
  67.             _javascript = javascript;
  68.         }
  69.  
  70.         public override void OnPageFinished(WebView view, string url)
  71.         {
  72.             base.OnPageFinished(view, url);
  73.             view.EvaluateJavascript(_javascript, null);
  74.         }
  75.     }
  76.  
  77.     public class JSBridge : Java.Lang.Object
  78.     {
  79.         readonly WeakReference<HybridWebViewRenderer> hybridWebViewRenderer;
  80.  
  81.         public JSBridge(HybridWebViewRenderer hybridRenderer)
  82.         {
  83.             hybridWebViewRenderer = new WeakReference<HybridWebViewRenderer>(hybridRenderer);
  84.         }
  85.  
  86.         [JavascriptInterface]
  87.         [Export("invokeAction")]
  88.         public void InvokeAction(string data)
  89.         {
  90.             HybridWebViewRenderer hybridRenderer;
  91.  
  92.             if (hybridWebViewRenderer != null && hybridWebViewRenderer.TryGetTarget(out hybridRenderer))
  93.             {
  94.                 hybridRenderer.Element.InvokeAction(data);
  95.             }
  96.         }
  97.     }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment