从 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 };
我有一个问题:如何在 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 };