Click here to Skip to main content
Click here to Skip to main content

Retrieve a Web Pages' Shortcut Icon

By , 17 Oct 2008
 
Screenshot - firefox.jpg

Screenshot - MyProj.jpg

Introduction

Ever wondered how Internet Explorer and Firefox get those little webpage icons in their address bar or tabs? Well, so did I.

I found a couple of ways to retrieve the icon from a webpage.

But, I am the first to say this surely can't be the best or easiest way of doing this. But hey, it works. Will appreciate if the gurus out there can post some alternative (by alternative, I mean better) methods of extracting the webpage SHORTCUT ICON.

The Code

This code is triggered on the webbrowser's Navigating event.

In this method, there is a double check for the webpage icon. Usually a webpage icon is called favicon.ico. So you can get the icon from a host URL (like www.google.com) by adding /favicon.ico to it. Eg. http://www.codeproject.com/favicon.ico. This should display the icon in a webbrowser.

BUT, sometimes webpages don't call their shortcut icon favicon.ico. So I went to the HTML document to retrieve the icon path. It should be located under the element tag link with attribute rel where rel equals SHORTCUT ICON.

Now I can extract the icon in two different ways. First I get the URL and simply display the icon in an HTML control, in this case a WebBrowser. Secondly, I stream the icon to an image and display it as such in an Image control.

Here's the code:

Firstly set your proxy – if any.

  string iconPath = "";

  Image img = null;
  Stream myStream = null;

  WebProxy proxy = new WebProxy("http://proxy:80/", true);
  proxy.Credentials = new NetworkCredential("userId", "password", "Domain");

Continuing with the above method, I simply add /favicon.ico to the current URL and send a request.

WebRequest requestImg = WebRequest.Create("http://" + e.Url.Host + "/favicon.ico");

  requestImg.Proxy = proxy;
  requestImg.Timeout = 10000;

Create an instance of the WebResponse. If the response ContentLength is bigger then zero, we simply use the URL we just cooked up.

  WebResponse response = requestImg.GetResponse();

  if (response.ContentLength > 0)
      myStream = response.GetResponseStream();  

ELSE, loop through the HTML document elements and retrieve the attribute rel that equals SHORTCUT ICON. From this, we can retrieve the icon name.

  else
  {
      HtmlDocument doc = webBrowser1.Document;
      HtmlElementCollection collect = doc.GetElementsByTagName("link");

    foreach (HtmlElement element in collect)
    {
         if (element.GetAttribute("rel") == "SHORTCUT ICON")
         iconPath = element.GetAttribute("href");
       }

    this.Text = doc.Title;
               
    requestImg = WebRequest.Create("http://" + e.Url.Host + iconPath);
                
    response = requestImg.GetResponse();

    myStream = response.GetResponseStream();
  }

Lastly, I display the "values" in an Image and WebBrowser.

  img = Image.FromStream(myStream);
  this.pictureBox1.Image = img;

  webBrowser2.Url = requestImg.RequestUri;
  webBrowser2.Update();

Conclusion

Like I said from the start, this surely can't be the best way, can it? Please post a message if there's any other way of doing this.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Johan "BJ" Vorster
Software Developer
United Kingdom United Kingdom
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 2memberrutstyle16 Feb '11 - 17:45 
GeneralRe: My vote of 2memberJohan "BJ" Vorster13 Jan '12 - 0:42 
GeneralA class would be nicememberBigdeak22 Jun '10 - 5:37 
QuestionHow do you save the icon?memberthund3rstruck13 Nov '09 - 17:43 
GeneralBetter working code!membermcgin159113 Jul '09 - 10:39 
GeneralRe: Better working code!memberJohan "BJ" Vorster13 Jul '09 - 22:18 
GeneralRe: Better working code!membermcgin15919 Aug '09 - 12:55 
QuestionCode would not execute past GetResponse call...memberDdoubleD21 May '09 - 12:43 
AnswerRe: Code would not execute past GetResponse call...memberJohan "BJ" Vorster21 May '09 - 21:51 
GeneralRe: Code would not execute past GetResponse call...memberDdoubleD22 May '09 - 3:12 
GeneralRe: Code would not execute past GetResponse call...memberDdoubleD22 May '09 - 7:59 
GeneralRe: Code would not execute past GetResponse call...memberJohan "BJ" Vorster25 May '09 - 22:37 
GeneralRe: Code would not execute past GetResponse call...memberDdoubleD26 May '09 - 1:55 
GeneralRe: Code would not execute past GetResponse call...memberJohan "BJ" Vorster26 May '09 - 2:25 
Questionhow to achieve "Retreive a web pages' shortcut icon" in asp.net2.0memberMohammmed Farooq27 Aug '08 - 1:21 
The above article was in c#.net Project but how can we achieve the same requirement "Retreive a web pages' shortcut icon" in asp.net website project.
 
Thanks
 
Mohd Farooq

AnswerRe: how to achieve "Retreive a web pages' shortcut icon" in asp.net2.0memberBJ Vorster27 Aug '08 - 1:32 
GeneralRe: how to achieve "Retreive a web pages' shortcut icon" in asp.net2.0memberMohammmed Farooq27 Aug '08 - 17:20 
GeneralRe: how to achieve "Retreive a web pages' shortcut icon" in asp.net2.0 [modified]memberBJ Vorster27 Aug '08 - 22:09 
GeneralShould probably check for link before /favicon.icomemberlogan133720 Jun '07 - 8:41 
GeneralRe: Should probably check for link before /favicon.icomemberBJ Vorster20 Jun '07 - 21:41 
GeneralRe: Should probably check for link before /favicon.icomembertekoteko1 Nov '07 - 7:47 
GeneralNot a web guru but...memberEd.Poore11 Jun '07 - 1:52 
GeneralRe: Not a web guru but...memberJohan Vorster11 Jun '07 - 1:59 
GeneralRe: Not a web guru but...memberEd.Poore11 Jun '07 - 2:36 
GeneralRe: Not a web guru but...memberJohan Vorster11 Jun '07 - 3:00 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130516.1 | Last Updated 17 Oct 2008
Article Copyright 2007 by Johan "BJ" Vorster
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid