【问题标题】:Xamarin Forms WebView Check When Website Address ChangedXamarin Forms WebView 检查网站地址更改时
【发布时间】:2014-10-20 10:57:08
【问题描述】:

我有以下代码在我的 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,但它似乎没有更新最新的更改。关于如何实现这一点的任何想法?

谢谢

【问题讨论】:

    标签: webview xamarin xamarin.android xamarin.forms


    【解决方案1】:

    这最终成为对 xamarin 表单 webview 控件的限制。解决方法是创建一个自定义渲染器,Xamarin 支持为我提供了一个很好的展示如何在github.com/jgold6/XFormsWebViewCustomRenderer/tree/master

    上完成此操作

    【讨论】:

    • 我需要 WindowsPhone 实现。你做到了吗?
    • 嗨,AEM,是的。应该在 github repo 中有代码。
    【解决方案2】:

    当我对 http://www.yahoo.com 进行了一些测试时,它似乎正在更新 WebView.Source 属性,即使使用 查询字符串 em> 属性。

    您是否只是更新当前网页位置,而不是导航到新页面?

    也许这就是它不适合你的原因?

    如果是这样,在更改之后,您将能够监视新导航网页的 .Source 属性,因为没有事件处理程序或任何可挂钩的东西来在页面时收到通知已导航到 / 完全加载。

    更新 1:-

    尝试以下对我有用的方法。

    它应该产生类似于以下内容的更新:-

    http://www.yahoo.com

    https://fr.yahoo.com/?p=us

    https://fr.news.yahoo.com/syrie-jihadistes-exécutent-160-soldats-43-casques-bleus-050134941.html

    http://www.tv3g.bouquettv.mobi/wap/landing/landing2.asp?c=LFYAH_TVGREEN_AAAMMM&IDLanding=16972&tag=0&Alea=7.906741E-02&Al=MM201408290946299694

    代码:-

            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;
    

    【讨论】:

    • 嗨皮特,感谢您的回复。我得到的结果与你不同。不知道我们是否会做一些不同的事情。我正在更改网站本身的 href/url。即在 javascript 中选择列表中的一行时,我使用 location.href = "test.com"; 将网站 href 更改为另一个位置。发生这种情况后,我在应用程序本身中打了一个断点,并检查了 webview 的来源,它仍然显示它第一次去的地址。有什么想法吗?
    • 这就是我在更改位置时所指的,即在 Javascript 中。您是否尝试过导航到不同的页面?,或者甚至可能不通过 Javascript 导航到同一页面?可能 location.href 没有触发 Xamarin.Forms WebView 控件中的事情,就像您在进行表单发布等时所做的那样。我没有专门尝试使用我的测试更改 URL 的 location.href 但这可能为什么它在你的情况下不起作用。
    • 嗨皮特,是的,我尝试在页面之间导航(不使用 href javascript),但它仍然没有发现我的代码中的任何更改。我知道这是一个很大的问题,但是您能否向我展示一个识别更改的代码示例?谢谢
    • 当然,没问题。请参阅主帖上的更新 1。就像另一项检查一样,您能否确保您也在使用最新的 Xamarin.Forms (stable)
    • 嗨皮特,很抱歉回复晚了。我已经尝试了您的确切代码 sn-p ,但仍然没有看到变化。我已经仔细检查了我的 dll 是最新的。这让我很头疼。只是想知道还有什么不同。我的所有控件和代码都是在运行时使用 Xamarin.Forms 编写在 Portable 类中的,并且在 android 和 ios 部署之间共享。任何机会你都可以给我你的代码/sln的rar/zip,我会检查差异。干杯
    【解决方案3】:

    如果您还没有自定义渲染器,则需要参考 Xamarin 文档以了解如何自定义渲染 Xamarin.Forms WebView。

    如果您已经拥有自定义渲染器,则在 CustomRenderer 对象中,您应该访问 NativeWebview 对象并将 HandleShouldStartLoad 分配给它的 ShouldStartLoad 事件处理程序。我的错误是我将 HandleShouldStartLoad 分配给了渲染器本身的事件处理程序,这不起作用。

    【讨论】:

      猜你喜欢
      • 2019-05-14
      • 1970-01-01
      • 2018-07-12
      • 2012-01-22
      • 1970-01-01
      • 2017-07-07
      • 2020-07-10
      • 2016-01-27
      • 2015-03-04
      相关资源
      最近更新 更多