Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin表单WebView缓存:GoBack()不';t调用导航事件_C#_Android_Visual Studio_Xamarin_Xamarin.forms - Fatal编程技术网

C# Xamarin表单WebView缓存:GoBack()不';t调用导航事件

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"

正如我之前在中所说,我是Xamarin.Forms的新手,正在使用Microsoft Visual Studio 2017版本15.5.4开发一个跨平台的web浏览器。我正在安卓5.1智能手机上调试

在我的布局中,有一个
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
    }
}