Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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# 如何获取webview当前持有的网页的标题?_C#_Xamarin_Xamarin.android_Visual Studio 2017 - Fatal编程技术网

C# 如何获取webview当前持有的网页的标题?

C# 如何获取webview当前持有的网页的标题?,c#,xamarin,xamarin.android,visual-studio-2017,C#,Xamarin,Xamarin.android,Visual Studio 2017,我正在尝试获取我的webview的标题,以便可以将其作为字符串存储在数据库中。但我找不到这样做的方法 我尝试使用mwebview.Title,但它有时会给我与URL相同的结果。以下是我在自定义WebViewClient中使用OnPageFinished覆盖的完整示例 WebViewCustomActivity.cs using System; using Android.App; using Android.OS; using Android.Webkit; namespace Xamdroi

我正在尝试获取我的webview的标题,以便可以将其作为字符串存储在数据库中。但我找不到这样做的方法


我尝试使用
mwebview.Title
,但它有时会给我与URL相同的结果。

以下是我在自定义WebViewClient中使用OnPageFinished覆盖的完整示例

WebViewCustomActivity.cs

using System;
using Android.App;
using Android.OS;
using Android.Webkit;

namespace XamdroidMaster.Activities {

    [Activity(Label = "Custom WebViewClient", MainLauncher = true)]
    public class WebViewCustomActivity : Activity {

        protected override void OnCreate(Bundle savedInstanceState) {
            base.OnCreate(savedInstanceState);

            SetContentView(Resource.Layout.WebView);
            WebView wv = FindViewById<WebView>(Resource.Id.webviewMain);

            CustomWebViewClient customWebViewClient = new CustomWebViewClient();
            customWebViewClient.OnPageLoaded += CustomWebViewClient_OnPageLoaded;

            wv.SetWebViewClient(customWebViewClient);
            wv.LoadUrl("https://www.stackoverflow.com");
        }

        private void CustomWebViewClient_OnPageLoaded(object sender, string sTitle) {
            Android.Util.Log.Info("MyApp", $"OnPageLoaded Fired - Page Title = {sTitle}");
        }

    }

    public class CustomWebViewClient : WebViewClient {

        public event EventHandler<string> OnPageLoaded;

        public override void OnPageFinished(WebView view, string url) {
            OnPageLoaded?.Invoke(this, view.Title);
        }

    }

}
使用系统;
使用Android.App;
使用Android.OS;
使用Android.Webkit;
命名空间XamdroidMaster.Activities{
[活动(Label=“Custom WebViewClient”,MainLauncher=true)]
公共类WebViewCustomActivity:活动{
创建时受保护的覆盖无效(Bundle savedInstanceState){
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.WebView);
WebView wv=findviewbyd(Resource.Id.webviewMain);
CustomWebViewClient CustomWebViewClient=新建CustomWebViewClient();
customWebViewClient.OnPageLoaded+=customWebViewClient\u OnPageLoaded;
wv.SetWebViewClient(customWebViewClient);
wv.LoadUrl(“https://www.stackoverflow.com");
}
private void CustomWebViewClient_OnPageLoaded(对象发送方,字符串缝合){
Android.Util.Log.Info(“MyApp”,“OnPageLoaded-pagetitle={sTitle}”);
}
}
公共类CustomWebViewClient:WebViewClient{
公共事件事件处理程序OnPageLoaded;
公共覆盖无效OnPageFinished(WebView视图,字符串url){
OnPageLoaded?.Invoke(这个,view.Title);
}
}
}
WebView.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/WebView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent">
    <WebView
        android:id="@+id/webviewMain"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FFFFFF" />
</LinearLayout>


您是否正在检查
OnPageFinished
覆盖中的标题?我应用了您刚才所说的内容。它正在工作,但是有没有一种方法可以让我使用
onPageStarted
override获得正确的标题@Sushingover我不知道这一点,因为各种页面都可以设置标题(html标记和javascript),在OnPageFinished之前,您真的不知道文档何时通过javascript完成解析或更新。您可以“尝试”尽快获取它,然后检查它是否在OnPageFinished中有所不同,并在需要时更新您的数据库..谢谢,但我有一个问题。当我在webview上加载twitter时,它有时会多次进入
onPageLoaded
功能。有没有办法阻止这一切@罗伯特·布鲁西(Robert BruceI)用我的推特账号进行了测试,但我无法重现你看到的内容。如果有一个特定的Twitter URL可以这样做,请提供该URL,以便我可以测试。在任何情况下,您都可以在OnPageLoaded方法中放置一个布尔标志,以在引发第一个调用后抑制后续调用。