Xamarin.Forms - Debugging WebView

Introduction

 
 
Xamarin.Forms code runs on multiple platforms, each of which has its own filesystem. This means that reading and writing files are most easily done using the native file APIs on each platform. Alternatively, embedded resources are a simpler solution to distribute data files with an app.
 

Debugging Webview

 
Mobile developers are facing major difficulties for debugging the web URLs. I am going explain how to debug your xamarin.forms webview in Emulator or Simulator.
 
Prerequisites
  • Visual Studio 2017 or later (Windows or Mac)

Setting up a Xamarin.Forms Project

 
Start by creating a new Xamarin.Forms project. You will learn more by going through the steps yourself.
 
Create a new or existing Xamarin forms (.Net standard) project with Android and iOS Platform.
 
Choose the Mobile App (Xamarin. forms) project under C# and Mobile.
 
Name your app. You probably want your project and solution to use the same name as your app. Put it on your preferred location for projects and click "Create".
 
Now, select the blank app and target platforms - Android, iOS and Windows (UWP).
 
Subsequently, go to the solution. In there, you get all the files and sources of your project (.NET Standard). Now, select the XAML page and double-click to open the MainPage.Xaml page.
 
You now have a basic Xamarin.Forms app. Click the Play button to try it out.
 

Create a Custom Webview

 
Here I am going to create a custom webview inherited from webview for debugging webview.
 
CustomWebView.cs
  1. public class CustomWebView : WebView  
  2.     {  
  3.     }  
Android Implementation
 
Here, create a custom renderer for enabling debugging in Android.
 
CustomWebViewRenderer.cs
  1. [assembly: ExportRenderer(typeof(CustomWebView), typeof(CustomWebViewRenderer))]  
  2.   
  3. namespace XamWebView.Droid  
  4. {  
  5.     public class CustomWebViewRenderer:WebViewRenderer  
  6.     {  
  7.         public CustomWebViewRenderer(Context context) : base(context)  
  8.         {  
  9.   
  10.         }  
  11.         protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)  
  12.         {  
  13.             base.OnElementChanged(e);  
  14.             global::Android.Webkit.WebView.SetWebContentsDebuggingEnabled(true);  
  15.         }  
  16.     }  
  17. }  
iOS Implementation
 
Here, create a custom renderer for enabling the Debugging in Webview.
 
CustomWebViewRenderer.cs
  1. [assembly: ExportRenderer(typeof(CustomWebView), typeof(CustomWebViewRenderer))]  
  2.   
  3. namespace PDFPOC.iOS  
  4. {  
  5.     public class CustomWebViewRenderer : WebViewRenderer  
  6.     {  
  7.         protected override void OnElementChanged(VisualElementChangedEventArgs e)  
  8.         {  
  9.             base.OnElementChanged(e);  
  10.   
  11.             if (NativeView != null && e.NewElement != null)  
  12.             {  
  13.                 var webView = NativeView as UIWebView;  
  14.   
  15.                 if (webView == null)  
  16.                     return;  
  17.   
  18.                 webView.ScalesPageToFit = true;  
  19.             }  
  20.         }  
  21.     }  
  22. }  
Consuming the CustomWebview
 
Here, consume the Custom Webview in your xaml
 
Add Namespace
  1. xmlns:controls="clr-namespace:XamWebView"  
Add your Custom Webview
 
MyWebPage.xaml
  1. <?xml version="1.0" encoding="utf-8" ?>    
  2. <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"    
  3.              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"    
  4.              xmlns:d="http://xamarin.com/schemas/2014/forms/design"    
  5.              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"    
  6.              mc:Ignorable="d"    
  7.              xmlns:controls="clr-namespace:XamWebView"    
  8.              x:Class="XamWebView.MainPage">    
  9.     
  10.     <controls:CustomWebView x:Name="webView" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">    
  11.             
  12.     </controls:CustomWebView>    
  13.     
  14. </ContentPage>   
MyWebPage.xaml.cs
  1. namespace XamWebView  
  2. {  
  3.     // Learn more about making custom code visible in the Xamarin.Forms previewer  
  4.     // by visiting https://aka.ms/xamarinforms-previewer  
  5.     [DesignTimeVisible(false)]  
  6.     public partial class MainPage : ContentPage  
  7.     {  
  8.         public MainPage()  
  9.         {  
  10.             InitializeComponent();  
  11.             webView.Source = "https://xamarinmonkeys.blogspot.com/";  
  12.         }  
  13.     }  
  14. }  
Android
 
Note
Must add the following line in your webview renderer
  1. global::Android.Webkit.WebView.SetWebContentsDebuggingEnabled(true);  
Go to Chrome on your Machine then inspect any webpage. Then click three dots, then go to More tools > Remote Devices. Now you can see at the bottom the device setting url. You can click that url.
 
chrome://inspect/#devices
 
 
Run your app in Emulator
 
 
Now go to the webpage and you can  see your webpage link, then click inspect.
 
Finally, you can inspect your webview.
 
 
iOS
 
Note: Check your iOS simulator and enable web inspector option.
 
Go to Settings > Safari > Advanced, and toggle the Web Inspector option on.
 
 
Next, you must also enable developer tools in Safari. Go to Safari > Preferences in the menu bar. Click on the Advanced tab and then enable the Show Develop menu option at the bottom.
 
Finally Run your app the go to Safari, click on Develop in the menu bar and hover over the dropdown option that is your iOS device's name to show a list of webview instances running on your iOS device
 
 
I hope you have understood how to enable debugging in webview in Xamarin.Forms.
 
Thanks for reading. Please share your comments and feedback. Happy Coding :)