【发布时间】:2018-07-22 22:31:25
【问题描述】:
正如我之前在 this question 中所说,我是 Xamarin.Forms 的新手,我正在使用 Microsoft Visual Studio 2017 版本 15.5.4 开发跨平台 Web 浏览器。我正在 Android 5.1 智能手机上调试。
在我的布局中,有一个 WebView 和两个 Buttons 可以后退/前进。
<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"/>
如您所见,有两种方法可以管理Navigating 和Navigated 事件,分别是
private void onPageLoading(object sender, WebNavigatingEventArgs e)
{
URLEntry.Text = e.Url; //Entry where I can see the page URL
//other code
}
private void onPageLoaded(object sender, EventArgs e)
{
//some code
}
当我点击WebView 中的链接或类似内容时,一切正常,但是当我必须在历史记录中返回/前进时,Entry 不会将 URL 更新为上一个/下一个.似乎它甚至没有调用onPageLoading 方法,而是WebView 加载了页面。
这些是Buttons调用的方法
private void previousPage (object sender, EventArgs e)
{
appWebView.GoBack();
}
private void nextPage (object sender, EventArgs e)
{
appWebView.GoForward();
}
这是 WebView 错误还是我做错了什么?
编辑:我认为页面被缓存了,有没有办法让它不这样做?
【问题讨论】:
-
你检查是否触发了
onPageLoaded事件? -
无论如何,您的
Entry.Text也可以绑定到WebView.Source。像这样:<Entry x:Name="URLEntry" Text="{Binding Source, Source={x:Reference appWebView}}" ... />. -
@DiegoRafaelSouza 我已经检查过了,它触发了
onPageLoaded,但不是onPageLoading -
Hmn... 似乎有一个缓存在后台工作,我在官方文档中没有找到任何关于它的信息,但是一旦组件提供了
GoBack和GoForward就可以理解了方法。为了保持您的思路,只需将onPageLoaded方法的签名更改为(object sender, WebNavigatedEventArgs e)并尝试在其中设置URLEntry.Text = e.Url;而不是onPageLoading作为解决方法。 (对不起我的英语不好) -
@DiegoRafaelSouza 好的,非常感谢。现在我注意到当我在我的 .cs 文件中手动定义
appWebView.Source时遇到了同样的问题,那就是它触发了onPageLoaded而不是onPageLoading... 当我单击 WebView 中的链接时,我没有这些问题
标签: c# android visual-studio xamarin xamarin.forms