我有以下代码在我的Xamarin.Forms跨平台应用程序中设置WebView:
ReportsListWebView = new WebView()
{
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.FillAndExpand,
BackgroundColor = Xamarin.Forms.Color.Transparent
};
URLReportsListWebView = new UrlWebViewSource
{
Url = "http://192.168.0.96/MyWebsite/App/MiniMyWebsite?ActionType=Listing&Params=Reports"
};
ReportsListWebView.Source = URLReportsListWebView;
grid.Children.Add(ReportsListWebView, 0, 4, 0, 1);
情况是我在网站中列出了我在WebView中引用的内容。当用户在网页上的列表中选择项目时,它具有改变网站URL的javascript(将#SelectedItem = 1附加到URL)。我只是希望能够从应用程序中识别出这种变化。
我已经检查了URLReportsListWebView.Url,但它似乎没有使用最新的更改进行更新。关于如何实现这一点的任何想法?
由于
答案 0 :(得分:2)
这最终成为对xamarin表单webview控件的限制。解决方法是创建一个自定义渲染器,Xamarin支持为我提供了一个很好的渲染器,展示如何在github.com/jgold6/XFormsWebViewCustomRenderer/tree/master
完成此任务。答案 1 :(得分:0)
当我针对 http://www.yahoo.com 进行了一些测试后,即使使用查询字符串,它似乎也正在更新 WebView.Source 属性属于。
您只是更新当前网页的位置而不是导航到新页面吗?
也许这可能是它不适合你的原因?
如果是这样,在更改之后,您将能够监视新导航的网页的 .Source 属性,因为没有事件处理程序或任何要挂钩的内容以在页面时收到通知已被导航到/完全加载。
更新1: -
尝试以下适用于我的方法。
它应该产生类似于以下内容的更新: -
https://fr.news.yahoo.com/syrie-jihadistes - exécutent-160-soldats-43-casques-青斑-050134941.html
代码: -
StackLayout objStackLayout = new StackLayout()
{
};
//
WebView objWebView1 = new WebView();
objWebView1.HeightRequest = 300;
objStackLayout.Children.Add(objWebView1);
//
UrlWebViewSource objUrlToNavigateTo = new UrlWebViewSource()
{
Url = "http://www.yahoo.com"
};
objWebView1.Source = objUrlToNavigateTo;
//
//
Button cmdButton1 = new Button();
cmdButton1.Text = "Show Me Current Url";
objStackLayout.Children.Add(cmdButton1);
//
cmdButton1.Clicked += ((o2, e2) =>
{
System.Diagnostics.Debug.WriteLine((objWebView1.Source as UrlWebViewSource).Url);
});
//
//
this.Content = objStackLayout;
答案 2 :(得分:0)
如果您还没有自定义渲染器,则需要参考Xamarin文档以了解如何自定义渲染Xamarin.Forms WebView。
如果您已经拥有自定义渲染器,则在CustomRenderer对象中,您应该访问NativeWebview对象并将HandleShouldStartLoad分配给其ShouldStartLoad事件处理程序。我的错误是我将HandleShouldStartLoad分配给渲染器本身的事件处理程序,这将无效。