Issue
I have a Xamarin.Forms app with a HybridWebView and a HybridWebViewRenderer in the Droid project.
I am trying to make the web view navigate back when the device's back button is pressed.
It looks pretty simple if I was just using a Xamarin.Forms WebView within my page. I would just do it like this...
protected override bool OnBackButtonPressed()
{
_webView.GoBack();
return true;
}
But the HybridWebView does not have a GoBack() method.
In my Droid project, the only place where I have access to the WebView is in the HybridWebViewRenderer but I cannot listen for the OnBackButtonPressed event here.
Anyone know how I can make a HybridWebView navigate back when the device's back button is pressed?
Solution
Calling window.history.back();
from Javascript might be a dirty solution.
Also, calling the renderer's method from a PCL class should not be a problem.
The PCL class:
public class MyHybridWebView : HybridWebView
{
public event EventHandler<EventArgs> DoSomeNative;
public void CallNative()
{
DoSomeNative(this, EventArgs.Empty);
}
}
The renderer:
public class MyHybridWebViewRenderer : HybridWebViewRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<View> e)
{
base.OnElementChanged(e);
if (e.OldElement != null || Element == null)
{
return;
}
(e.NewElement as MyHybridWebView).DoSomeNative += (sender, args) =>
{
//Do something
//Don't forget to unsubscribe in Dispose
};
}
}
Answered By - Mikalai Daronin
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.