从 webview UWP 获取图标

Get favicon from webview UWP

我有一个问题:如何在 C# UWP 的 webview 中获取页面的图标? 我想存储图标以便以后访问它。有什么办法吗?

谢谢。

Get favicon from webview UWP

html 中有 shortcut icon rel 属性,用于描述网站图标。您可以使用 WebView InvokeScriptAsync 将检测到的方法注入 eval 函数并使用 window.external.notify 将 favicon 的 href 传回。

例如

public MainPage()
{
    this.InitializeComponent();

    MyWebView.LoadCompleted += MyWebView_LoadCompleted;
}

private async void MyWebView_LoadCompleted(object sender, NavigationEventArgs e)
{
     string functionString = @"var nodeList = document.getElementsByTagName ('link');
for (var i = 0; i < nodeList.length; i++)
{
    if ((nodeList[i].getAttribute('rel') == 'icon') || (nodeList[i].getAttribute('rel') == 'shortcut icon'))
    {
        favicon = nodeList[i].getAttribute('href');
        window.external.notify(favicon); 
    }
}";

 await MyWebView.InvokeScriptAsync("eval", new string[] { functionString });

}

private void MyWebView_ScriptNotify(object sender, NotifyEventArgs e)
{
   var url = e.Value;
}

请注意

允许 sites 在 Package.appxmanifest 的内容 URI 部分指定并且不能包含域通配符并且必须是 https 。

这是 code sample 你可以参考。

我解决了。我做了以下事情:

Uri icoURI = new Uri("https://www.google.com/s2/favicons?domain=" + WebPageView.Source);
currentTab.IconSource = new Microsoft.UI.Xaml.Controls.BitmapIconSource() { UriSource = icoURI, ShowAsMonochrome = false };