Problema: Il menu di ASP.Net 2.0 (e immagino successivi, ma nn ho testato) su Safari, anche nell'ultima versione 3.1.1 (Win, per mac la versione nn so se è la stessa, ma il problema c'è cmq) non viene renderizzato correttamente, o forse sarebbe meglio dire che non viene proprio renderizzato.
Soluzione: Perso nei meandri delle ricerche, come al solito San Google mi è venuto in aiuto e sembra sia un problema abbastanza noto.
Le soluzioni proposte sono sostanzialmente due:
1) Modificare il file .browser relativo a Safari per modificarne le browser capabilities
Soluzione scelta da me in quanto il sito è già in produzione e non posso al momento fare modifiche al codice:
- Nella cartella [DRIVE]:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers editare il file 'mozilla.browser'
- Cercare la sezione:
<browser id="Safari" parentID="Gecko">
- Eliminare (o remmare) la parte:
<controlAdapters>
<adapter controlType="System.Web.UI.WebControls.Menu"
adapterType="System.Web.UI.WebControls.Adapters.MenuAdapter" />
</controlAdapters>
- Da riga di comando lanciare [DRIVE]:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regbrowsers.exe -i
...e tutto magicamente funziona!
Nota, se ci si trova su un sistema a 64bit effettuare la stessa serie di operazioni anche per il file mozilla.browser contenuto nella cartella Framework64
Ref. e thanks-to: http://www.big-o.org/?p=20
2) Riporto la soluzione che vari siti/forum espongono, ma nn l'ho testata (anche se lo farò presto dato che se sarà efficace, la includerò nelle pagine base da cui ereditano tutte le pagine delle mie applicazioni)
Inserire in ogni pagina, o sicuramente meglio in una pagina base da cui ereditano tutte le altre:
public class PageBase: Page
{
public PageBase() {}
protected void Page_PreInit(object sender, EventArgs e)
{
if (Request.ServerVariables["http_user_agent"].IndexOf("Safari", StringComparison.CurrentCultureIgnoreCase) != -1)
Page.ClientTarget = "uplevel";
}
}
Inoltre c'è chi suggeriva di inserire ClientTarget="uplevel" nelle direttive di pagina, ovviamente in ogni pagina!
<%@ Page ClientTarget="uplevel" ......%>
...vedremo....
P.S.: Per chi volesse addentrarsi nella scrittura di un proprio file .browser, segnalo http://msdn.microsoft.com/en-us/library/ms228122.aspx