By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
437,605 Members | 2,137 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 437,605 IT Pros & Developers. It's quick & easy.

Favicon type detection - possible?

P: n/a
I'm very noobish when it comes to Javascript, in fact I wasn't intending to
use it at all, but I've got myself distracted by this "problem". I want to
use an animated gif as my favicon. This works fine in Firefox, but Opera
and IE6 ignore it. To get around this, I started off attempting a browser
detection script (I know!) which I cobbled together from a couple of others,
but this doesn't work (is it because I'm trying to do weird things within
the header?). If I want to go down that road I can do it in PHP anyway.

But I thought, there must surely be a more elegant way of doing this. Like

if (browsericonsupport = gif) then
use gif
else
use ico

Any comments would be gratefully received.

+e

P.S. - for anyone interested, this is my cobbled together browser detection
code; I know it doesn't do anything with the favicon, but I was just seeing
if it would actually detect browsers correctly. The first bit, which I got
from here: http://www.quirksmode.org/js/detect.html does pick out the
browser correctly (tested on Firefox, Opera and IE6) but when I attempt to
alert it falls straight through the code. If I add "alert(browserName);"
then it alerts with "undefined" in all three browsers. I appreciate this is
very noobish!

<HEAD>
<SCRIPT language="JavaScript">
<!--
var BrowserDetect = {
init: function () {
this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
this.version = this.searchVersion(navigator.userAgent)
|| this.searchVersion(navigator.appVersion)
|| "an unknown version";
this.OS = this.searchString(this.dataOS) || "an unknown OS";
},
searchString: function (data) {
for (var i=0;i<data.length;i++) {
var dataString = data[i].string;
var dataProp = data[i].prop;
this.versionSearchString = data[i].versionSearch || data[i].identity;
if (dataString) {
if (dataString.indexOf(data[i].subString) != -1)
return data[i].identity;
}
else if (dataProp)
return data[i].identity;
}
},
searchVersion: function (dataString) {
var index = dataString.indexOf(this.versionSearchString);
if (index == -1) return;
return
parseFloat(dataString.substring(index+this.version SearchString.length+1));
},
dataBrowser: [
{ string: navigator.userAgent,
subString: "OmniWeb",
versionSearch: "OmniWeb/",
identity: "OmniWeb"
},
{
string: navigator.vendor,
subString: "Apple",
identity: "Safari"
},
{
prop: window.opera,
identity: "Opera"
},
{
string: navigator.vendor,
subString: "iCab",
identity: "iCab"
},
{
string: navigator.vendor,
subString: "KDE",
identity: "Konqueror"
},
{
string: navigator.userAgent,
subString: "Firefox",
identity: "Firefox"
},
{
string: navigator.vendor,
subString: "Camino",
identity: "Camino"
},
{ // for newer Netscapes (6+)
string: navigator.userAgent,
subString: "Netscape",
identity: "Netscape"
},
{
string: navigator.userAgent,
subString: "MSIE",
identity: "Explorer",
versionSearch: "MSIE"
},
{
string: navigator.userAgent,
subString: "Gecko",
identity: "Mozilla",
versionSearch: "rv"
},
{ // for older Netscapes (4-)
string: navigator.userAgent,
subString: "Mozilla",
identity: "Netscape",
versionSearch: "Mozilla"
}
],
dataOS : [
{
string: navigator.platform,
subString: "Win",
identity: "Windows"
},
{
string: navigator.platform,
subString: "Mac",
identity: "Mac"
},
{
string: navigator.platform,
subString: "Linux",
identity: "Linux"
}
]
};
BrowserDetect.init;

//bit nicked from http://www.quirksmode.org/js/detect.html above
//bit cobbled together by me below

var browserName = BrowserDetect.browser;
if (browserName=="Netscape")
{
alert("Hi Netscape User!");
}
else
{
if (browserName=="Explorer")
{
alert("Hi, Explorer User!");
}
else
{
if (browserName=="Firefox")
{
alert("Hi, Firefox User!");
}
else
{
if (operaName=="Opera")
{
alert("Hi, Opera User!");
}
else
{
alert("What ARE you browsing with here?");
}
}
}
}
//-->
</SCRIPT>
</HEAD>
Sep 20 '06 #1
Share this Question
Share on Google+
5 Replies


P: n/a
The Eclectic Electric wrote:
I'm very noobish when it comes to Javascript, in fact I wasn't intending to
use it at all, but I've got myself distracted by this "problem". I want to
use an animated gif as my favicon. This works fine in Firefox, but Opera
and IE6 ignore it. ...
<snip>
>
But I thought, there must surely be a more elegant way of doing this. Like

if (browsericonsupport = gif) then
use gif
else
use ico

Any comments would be gratefully received.
Wouldn't the HTTP accept header for the request from the browser for
the icon be expected to state the accepted content types? Why not
detect that with you PHP and serve content accordingly?
P.S. - for anyone interested, this is my cobbled together browser
detection code; I know it doesn't do anything with the favicon, but
I was just seeing if it would actually detect browsers correctly....
<snip>

It does not.

Richard.

Sep 20 '06 #2

P: n/a
"Richard Cornford" <Ri*****@litotes.demon.co.ukwrote in message
news:11*********************@b28g2000cwb.googlegro ups.com...
The Eclectic Electric wrote:
>I'm very noobish when it comes to Javascript, in fact I wasn't intending
to
use it at all, but I've got myself distracted by this "problem". I want
to
use an animated gif as my favicon. This works fine in Firefox, but Opera
and IE6 ignore it. ...
<snip>
>>
But I thought, there must surely be a more elegant way of doing this.
Like

if (browsericonsupport = gif) then
use gif
else
use ico

Any comments would be gratefully received.

Wouldn't the HTTP accept header for the request from the browser for
the icon be expected to state the accepted content types? Why not
detect that with you PHP and serve content accordingly?
Very good idea. Unfortunately I can't see a way to isolate the specific
request for the icon.

+e
Sep 21 '06 #3

P: n/a
The Eclectic Electric wrote:
Richard Cornford wrote:
>The Eclectic Electric wrote:
>>I'm very noobish when it comes to Javascript, in fact I wasn't
intending to use it at all, but I've got myself distracted by
this "problem". I want to use an animated gif as my favicon.
This works fine in Firefox, but Opera and IE6 ignore it. ...
<snip>
>Wouldn't the HTTP accept header for the request from the
browser for the icon be expected to state the accepted
content types? Why not detect that with you PHP and
serve content accordingly?
Very good idea. Unfortunately I can't see a way to isolate
the specific request for the icon.
If PHP is worth anything as a server side scripting language that task
is trivial. Try asking in a PHP group.

Richard.

Sep 21 '06 #4

P: n/a
"Richard Cornford" <Ri*****@litotes.demon.co.ukwrote in message
news:11*********************@e3g2000cwe.googlegrou ps.com...
The Eclectic Electric wrote:
>Richard Cornford wrote:
>>The Eclectic Electric wrote:
I'm very noobish when it comes to Javascript, in fact I wasn't
intending to use it at all, but I've got myself distracted by
this "problem". I want to use an animated gif as my favicon.
This works fine in Firefox, but Opera and IE6 ignore it. ...
<snip>
>>Wouldn't the HTTP accept header for the request from the
browser for the icon be expected to state the accepted
content types? Why not detect that with you PHP and
serve content accordingly?
Very good idea. Unfortunately I can't see a way to isolate
the specific request for the icon.

If PHP is worth anything as a server side scripting language that task
is trivial. Try asking in a PHP group.

Richard.
I have to confess I'm out of my depth when it comes to the technicalities of
these things, but wouldn't the request for <LINK REL="icon" ... /go to the
web server and not get routed through the PHP engine? Once I've served the
original page, isn't the PHP engine quiet until another PHP page is
requested?

+e
Sep 21 '06 #5

P: n/a
The Eclectic Electric wrote:
Richard Cornford wrote:
>The Eclectic Electric wrote:
>>Richard Cornford wrote:
<snip>
>>Very good idea. Unfortunately I can't see a way to isolate
the specific request for the icon.

If PHP is worth anything as a server side scripting language that task
is trivial. Try asking in a PHP group.

I have to confess I'm out of my depth when it comes to the technicalities
of these things, but wouldn't the request for <LINK REL="icon" ... />
go to the web server and not get routed through the PHP engine?
First, it does no make sense to ask PHP questions in a javascript
newsgroup.

If the HREF referred to in the LINK element is the URL of a PHP
resource it will receive the request and should be able to examine the
HTTP header. Otherwise the HTTP server can map any incoming URL to any
resource, including PHP scripts.
Once I've served the original page, isn't the PHP engine quiet until
another PHP page is requested?
Ask a PHP group (humbly).

Richard.

Sep 21 '06 #6

This discussion thread is closed

Replies have been disabled for this discussion.