C# Xamarin表单WebView缓存:GoBack()不';t调用导航事件
正如我之前在中所说,我是Xamarin.Forms的新手,正在使用Microsoft Visual Studio 2017版本15.5.4开发一个跨平台的web浏览器。我正在安卓5.1智能手机上调试 在我的布局中,有一个C# Xamarin表单WebView缓存:GoBack()不';t调用导航事件,c#,android,visual-studio,xamarin,xamarin.forms,C#,Android,Visual Studio,Xamarin,Xamarin.forms,正如我之前在中所说,我是Xamarin.Forms的新手,正在使用Microsoft Visual Studio 2017版本15.5.4开发一个跨平台的web浏览器。我正在安卓5.1智能手机上调试 在我的布局中,有一个WebView和两个按钮用于返回/前进 <Button Image="backarrowdisabled.png" Grid.Row="1" Grid.Column="0"
WebView
和两个按钮
用于返回/前进
<Button Image="backarrowdisabled.png"
Grid.Row="1"
Grid.Column="0"
x:Name="backButton"
IsEnabled="False"
Clicked="previousPage">
<Button.Triggers>
<DataTrigger TargetType="Button"
Binding="{Binding CanGoBack, Source={Reference appWebView}}"
Value="False">
<Setter Property="IsEnabled" Value="False" />
<Setter Property="Image" Value="backarrowdisabled.png" />
</DataTrigger>
<DataTrigger TargetType="Button"
Binding="{Binding CanGoBack, Source={Reference appWebView}}"
Value="True">
<Setter Property="IsEnabled" Value="True" />
<Setter Property="Image" Value="backarrow.png" />
</DataTrigger>
</Button.Triggers>
</Button>
<Button Image="nextarrowdisabled.png"
Grid.Row="1"
Grid.Column="5"
x:Name="nextButton"
IsEnabled="False"
Clicked="nextPage">
/* triggers */
</Button>
<WebView Grid.Row="3"
Grid.Column="0"
Grid.ColumnSpan="6"
x:Name="appWebView"
Source="https://www.google.it/"
Navigating="onPageLoading"
Navigated="onPageLoaded"/>
当我在我的WebView
中单击一个链接或类似的东西时,一切正常,但当我必须在历史记录中返回/前进时,条目
不会将URL更新为上一个/下一个。似乎它甚至没有调用onpageload
方法,而是WebView
加载页面
这些是由按钮调用的方法
private void previousPage (object sender, EventArgs e)
{
appWebView.GoBack();
}
private void nextPage (object sender, EventArgs e)
{
appWebView.GoForward();
}
这是一个WebView
bug还是我做错了什么
编辑:我认为页面是缓存的,有没有办法让它不这样做?您可以做的一件事是为WebView
的属性更改
或属性更改
事件创建另一个事件处理程序。在那里,您可以检查源
属性是否已更改;如果是这样,您可以使用新源更新TextView
。(我不确定是否准确,但似乎在向后或向前导航时,navigating
事件不会被调用,可能是因为页面已经被缓存了?)
请看这里:
所以你的代码看起来像
<WebView x:Name="MyWebView" PropertyChanged="OnWebViewPropertyChanged" />
您是否检查了它是否触发了onPageLoaded
事件?无论如何,您的条目.Text
可以绑定到WebView.Source
。像这样:
@diegrafaelsouza我现在已经检查过了,它正在触发onPageLoaded
但不是onPageLoaded
Hmn。。。在引擎盖后面似乎有一个缓存在工作,我在官方文档中没有找到任何关于它的信息,但是一旦组件提供了GoBack
和GoForward
方法,这是可以理解的。为了保持思路,只需将onPageLoaded
方法的签名更改为(objectsender,WebNavigatedEventArgs e)
,然后尝试设置URLEntry.Text=e.Url代码>在其内部,而不是onPageLoading
作为解决方法。(很抱歉我的英语不好)@diegrafaelsouza好的,非常感谢。现在我注意到,当我在.cs文件中手动定义appWebView.Source
时,我遇到了同样的问题,那就是它触发了onPageLoaded
,而不是onPageLoaded
。。。当我点击WebView中的链接时,我没有处理这些问题异常:Xamarin.Forms.Xaml.XamlParseException:Position 100:22。WebViewPropertyChanged上的方法没有正确的签名。如果我将该方法声明为protectedoverride void
(正如您链接的页面上所写的那样)@mara6399我更新了答案以显示正确的方法签名。我想Xamarin的文档有点不对劲。现在它工作得很好,只需使用(appWebView.Source作为UrlWebViewSource.Url)而不是MyWebView.Source.ToString()进行编辑即可
<WebView x:Name="MyWebView" PropertyChanged="OnWebViewPropertyChanged" />
private void OnWebViewPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == WebView.SourceProperty.PropertyName)
{
URLEntry.Text = MyWebView.Source.ToString(); // May need to check this
}
}