C# 如何获取webview当前持有的网页的标题?
我正在尝试获取我的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
我尝试使用
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方法中放置一个布尔标志,以在引发第一个调用后抑制后续调用。