webbrowser ページごとのアイコンについて への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 るきお  (社会人)
投稿日時
2009/11/2 05:44:15
あにすさん、素晴らしいです!
投稿者 wii  (中学生)
投稿日時
2009/11/2 04:24:05
みなさん、ありがとうございました!!
おかげさまで今、作ったブラウザで書き込んでいます!
また質問すると思いますが、そのときはまたよろしくお願いします!
おかげさまで今、作ったブラウザで書き込んでいます!
また質問すると思いますが、そのときはまたよろしくお願いします!
投稿者 あにす  (社会人)
投稿日時
2009/11/2 03:29:14
簡単かというと怪しいですが…DOMってみました。
Imports System.Net
Imports System.IO
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.WebBrowser1.Navigate("http://blogs.dion.ne.jp/anis7742/")
End Sub
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
For Each linkTag As HtmlElement In Me.WebBrowser1.Document.GetElementsByTagName("link")
Dim relAttribute As String = linkTag.GetAttribute("rel")
Dim iconUrl As String
If relAttribute = "shortcut icon" OrElse relAttribute = "icon" Then
iconUrl = linkTag.GetAttribute("href")
If iconUrl.StartsWith("http") Then '完全なURLの場合
Me.Icon = getIconFromUrl(iconUrl)
ElseIf iconUrl.StartsWith("/") Then '絶対URLの場合
Me.Icon = getIconFromUrl("http://" + e.Url.Host + iconUrl)
Else '相対URLの場合
Me.Icon = getIconFromUrl(e.Url.ToString() + iconUrl)
End If
Exit For
End If
Next
'タグでの指定が無い場合
Me.Icon = getIconFromUrl("http://" + e.Url.Host + "/favicon.ico")
End Sub
Private Function getIconFromUrl(ByVal url As String) As Icon
Using webClient As New WebClient
Dim icondata As Byte() = webClient.DownloadData(url)
Using stream As New MemoryStream(icondata)
Return New Icon(stream)
End Using
End Using
End Function
End Class
投稿者 るきお  (社会人)
投稿日時
2009/11/2 02:13:18
こんにちは。
ページごとのアイコンをどこに表示したいのかわかりませんでしたが、
仮にフォームのアイコンとして表示したいものと考えてプログラムしてみました。
…が、結構大変そうなのでめげて中途半端です。
googleはいけます。
あにすさんの情報の
http://ja.wikipedia.org/wiki/Favicon
をプログラムで表現しようとしたのですが、
要するにWebサイト側でのアイコンの場所は
1.ルートディレクトリ直下のfavicon.ico
2.html内のタグで指定
の2パターンがあって、
上記サンプルでは1の方に中途半端に対応していて、2のほうは無対応です。
メジャーなブラウザ並みに対応しようと思ったら結構大変そうな感触です。
IEにはこのロジックが実装されているはずなのだからWebBrowserコントロール経由で
もっと簡単に持ってくる方法があるような気がします。
どなたかご存じないですか?
ページごとのアイコンをどこに表示したいのかわかりませんでしたが、
仮にフォームのアイコンとして表示したいものと考えてプログラムしてみました。
…が、結構大変そうなのでめげて中途半端です。
googleはいけます。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim icon As Icon
icon = GetWebSiteIcon("http://www.google.co.jp")
If icon IsNot Nothing Then
Me.Icon = icon
Else
Me.Icon = Nothing
End If
End Sub
Private Function GetWebSiteIcon(ByVal url As String) As Icon
Dim icon As Icon
Dim webpage As System.Net.HttpWebRequest = Net.WebRequest.Create(url & "/favicon.ico")
Dim response As System.Net.WebResponse
Try
response = webpage.GetResponse()
Catch ex As Net.WebException
'
End Try
If response IsNot Nothing AndAlso response.ContentType.ToUpper.StartsWith("IMAGE/") Then
'ルートディレクトリにfavicon.icoがある場合
Dim iconFolderName As String = Application.StartupPath & "\icon"
If IO.Directory.Exists(iconFolderName) = False Then
IO.Directory.CreateDirectory(iconFolderName)
End If
Dim iconFileFullPath As String = iconFolderName & "\temp.ico"
Dim reader As New IO.BinaryReader(response.GetResponseStream)
IO.File.WriteAllBytes(iconFileFullPath, reader.ReadBytes(response.ContentLength))
reader.Close()
icon = New Icon(iconFileFullPath)
Else
'その他の場合(未実装)
End If
response.Close()
Return icon
End Function
あにすさんの情報の
http://ja.wikipedia.org/wiki/Favicon
をプログラムで表現しようとしたのですが、
要するにWebサイト側でのアイコンの場所は
1.ルートディレクトリ直下のfavicon.ico
2.html内のタグで指定
の2パターンがあって、
上記サンプルでは1の方に中途半端に対応していて、2のほうは無対応です。
メジャーなブラウザ並みに対応しようと思ったら結構大変そうな感触です。
IEにはこのロジックが実装されているはずなのだからWebBrowserコントロール経由で
もっと簡単に持ってくる方法があるような気がします。
どなたかご存じないですか?
投稿者 あにす  (社会人)
投稿日時
2009/11/1 17:11:18
Favicon(ファビコン)というもので、下記ページで仕様を知ることが出来ます。
Favicon - Wikipedia
http://ja.wikipedia.org/wiki/Favicon
Favicon - Wikipedia
http://ja.wikipedia.org/wiki/Favicon
投稿者 wii  (中学生)
投稿日時
2009/11/1 07:33:57
すみません中学生です
投稿者 wii  (社会人)
投稿日時
2009/11/1 07:30:21
初質問です。
今、webbrowserコントロールでブラウザを作っています。
タイトルは
[CODE]
Me.Text=WebBrowser.DocumentTytle
[CODE]
でできました。でも、IEのようにページごとのアイコン(gooだったらピンクの「g」みたいな)
が表示できません。
MSDNのWebBrowserメンバを見てもありません。
どうにかなりませんか?