Homepage reloaded
|
Už je tomu nějakej ten týden, co jsem nasadil novou sociální homepage. Po úpravách, které jí měly vystavovat jako application/xhtml+xml
došlo k tomu, že jsem se na ní ve Firefoxu už nedostal.
Měl jsem za to, že je chyba v mém systému a že je muj FF nějakej nabořenej, protože u Macíka to třeba nedělalo. Proto jsem to ani moc neřešil. Jenže jsem si jednoho dne řekl, že to musím rozlousknout.
Jádro pudla
Chyba nakonec nebyla pouze v mém Firefoxu, ale šlo o kombinaci Firofox + Silverlight. Do svého Google Analytics kódu jsem měl totiž přidaný kód, pro měření zastoupení Silverlight pluginu, který jsem vzal od Nikhila Kothariho. Problém byl v tom, že plugin instancioval pomocí vytvoření embed
značky přes innerHTML
. To v kombinaci s application/xhtml+xml
Firefox sestřelilo.
Řešení
Když si mě včera do Twittru přidal Arcao, našel jsem na jeho stránkách informaci, o které jsem dosud nevěděl. Google Analytics maj novej script pro měření. Takže ten jsem použil pro novou verzi meho kontrolu na měření návštěvnosti. A začal si hrát s ověřováním Silverlightu. U IE jsem zůstal u metody inicializace ActiveX objektu a využití jeho API. U Firefoxu jsme na to musel trochu jinak. Nakonec jsem využil PAPI a vlastnost description
, která vrací verzi pluginu.
Ale verze pluginu se neshoduje s komerčním označením Silverlightu. Musel jsem tedy ještě přidat přepočet. Zatím je to takhle:
Plug-in | Silverlight |
---|---|
0.80 | WPF/e |
0.90 | Silverlight 1.0 |
0.95 | Silverlight 1.1 |
1.00 | Silverlight 2.0 |
No a výsledný kód po nějaké kompresi vypadá takto:
<%@ Control Language="C#" %>
<script runat="server">
private string _ua;
public string UserAccount {
get { return _ua; }
set { _ua = value; }
}
</script>
<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
<% if (Page.Response.ContentType.ToLower() == "text/html") { %><!--<% } else { %>// <![CDATA[ <% } %>
try{var t=_gat._getTracker("<%= UserAccount %>"),v=(function (){var v='',n={},s='Silverlight',a='AgControl',b=s+' Plug-In',x=['2.0','1.1','1.0'];n.a=window.navigator.userAgent;n.p=navigator.plugins;
try {if(n.a.indexOf('MSIE')>=0){var c=new ActiveXObject(a+'.'+a);if(c)for(var i=0;i<sv.length;i++)if(c.isVersionSupported(x[i])){v=s+'/'+x[i];break;}}
else if(n.p[b]){v=n.p[b].description;var d=v.split('.');if(d.length>0)v=d[0]=='1'?s+'/2.0':d[0]=='0'&&d[1]=='95'?s+'/1.1':d[0]=='0'&&d[1]=='90'?s+'/1.0':d[0]=='0'&&d[1]=='80'?'WPF/E':'';}
}catch(e){}return v;})(),a=t._addOrganic,b=t._setVar,q='q',s='s';
a('seznam.cz',q);a('centrum.cz',q);a('jyxo.cz',s);a('atlas.cz',q);a('zoohoo.cz',q);a('tiscali.cz','query');a('1.cz',q);a('volny.cz','search');
a('zoznam',s);a('atlas.sk','phrase');a('centrum.sk',q);a('morfeo.sk',q);a('szm','ws');a('azet',s+q);a('zoohoo.sk',q);
t._initData();t._trackPageview();if(v)b(v);}catch(e){}
<% if (Page.Response.ContentType.ToLower() == "text/html") { %>// --><% } else { %>// ]]><% } %>
</script>
Snad se bude hodit.
Okomentováno