Cefsharp: obteniendo favicon

Creado en 14 jul. 2013  ·  5Comentarios  ·  Fuente: cefsharp/CefSharp

cómo obtener favicon del sitio visitado

Todos 5 comentarios

Este no es un problema relacionado con CefSharp. Si desea aprender cómo obtener un favicon de un sitio web, puede buscar en Google una forma, pero esta es la más fácil (tomada de esta pregunta de StackOverflow):

string url = ""; // Replace with your URL
using (WebClient client = new WebClient())
    client.DownloadFile(string.Format("http://getfavicon.appspot.com/{0}", url), "icon.ico");

El favicon del sitio estaría en un archivo llamado "icon.ico", o lo que sea que decida cambiarle el nombre.

Buen punto, @csdevrich. Por supuesto, también podríamos agregar ganchos para esto en CefSharp. @ asarchit65 - ¿es eso lo que buscas? Explique su caso de uso con más detalle. Cerrando por ahora.

Para cualquiera que vea esto en el futuro, el método debe actualizarse a esto:

string url = ""; // Replace with your URL
using (WebClient client = new WebClient())
    client.DownloadFile(string.Format("http://www.google.com/s2/favicons?domain={0}", url), "icon.ico");

Clase completa que implementa IDisplayHandler para obtener solo el favicon.ico de la raíz del sitio web y enlazarlo con el icono de una ventana de WPF. Para referencia de las personas en caso de que se encuentren con este problema en el futuro.
Puede que no sea la mejor pieza de código ... codificador entusiasta aquí.
`` C #
clase DisplayHandler: IDisplayHandler, INotifyPropertyChanged
{
evento público PropertyChangedEventHandler PropertyChanged;

private object _favIcon;

/// <summary>
/// For binding to System.Windows.Window.Icon.
/// </summary>
public object FavIcon {
    get { return _favIcon; }
    set { _favIcon = value; OnPropertyChanged("FavIcon"); }
}

private BitmapDecoder _decoder;
private BitmapDecoder Decoder {
    get => _decoder;
    set {
        if (_decoder != null) _decoder.DownloadCompleted -= decoderDownloadCompleted;
        _decoder = value;
        if (_decoder != null) _decoder.DownloadCompleted += decoderDownloadCompleted;
    }
}

private void decoderDownloadCompleted(object sender, EventArgs e)
{
    FavIcon = Decoder.Frames.OrderBy(f => f.Width).FirstOrDefault();
    Decoder = null;
}

protected void OnPropertyChanged(string propertyName)
{
    if (!Application.Current.Dispatcher.CheckAccess())
        Application.Current.Dispatcher.Invoke(() => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)));
    else PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}



public void OnAddressChanged(IWebBrowser chromiumWebBrowser, AddressChangedEventArgs addressChangedArgs)
{
}

public bool OnAutoResize(IWebBrowser chromiumWebBrowser, IBrowser browser, CefSharp.Structs.Size newSize)
{
    return false;
}

public bool OnConsoleMessage(IWebBrowser chromiumWebBrowser, ConsoleMessageEventArgs consoleMessageArgs)
{
    return false;
}

public void OnFaviconUrlChange(IWebBrowser chromiumWebBrowser, IBrowser browser, IList<string> urls)
{
    var baseUrl = new Uri(browser.MainFrame.Url).GetLeftPart(UriPartial.Authority);
    Application.Current.Dispatcher.Invoke(() =>
    {
        Decoder = BitmapDecoder.Create(new Uri(baseUrl + "/favicon.ico"), BitmapCreateOptions.None, BitmapCacheOption.OnDemand);
    });
}

public void OnFullscreenModeChange(IWebBrowser chromiumWebBrowser, IBrowser browser, bool fullscreen)
{
}

public void OnLoadingProgressChange(IWebBrowser chromiumWebBrowser, IBrowser browser, double progress)
{
}

public void OnStatusMessage(IWebBrowser chromiumWebBrowser, StatusMessageEventArgs statusMessageArgs)
{
}

public void OnTitleChanged(IWebBrowser chromiumWebBrowser, TitleChangedEventArgs titleChangedArgs)
{
}

public bool OnTooltipChanged(IWebBrowser chromiumWebBrowser, ref string text)
{
    return false;
}

}

And the Window.xaml:
```XAML
<Window ...
    Icon="{Binding ElementName=Browser_DisplayHandler, Mode=OneWay, Path=FavIcon, TargetNullValue=browser.ico}">
    <wpf:ChromiumWebBrowser>
            <wpf:ChromiumWebBrowser.DisplayHandler>
                <local:DisplayHandler x:Name="Browser_DisplayHandler"/>
            </wpf:ChromiumWebBrowser.DisplayHandler>
    </wpf:ChromiumWebBrowser>
</Window>
¿Fue útil esta página
0 / 5 - 0 calificaciones