2010-10-06 5 views
8

Ist es möglich, die browserCaps-Funktionalität in ASP.NET zu deaktivieren?Ist es möglich, die browserCaps-Funktionalität in ASP.NET zu deaktivieren?

Ich möchte, dass meine Website zuverlässig und genau wie ich es definiert habe, unabhängig von ihren Fähigkeiten für alle Browser bereitgestellt wird.

Wenn ihr Browser die Seite nicht unterstützen kann, ist das ihr Problem. Meine Website sollte nicht so sein, wie sie sich selbst zu degradieren versucht, um den nicht mehr existierenden Client unterzubringen.

Dies ist sehr frustrierend, wenn es scheint, das Pech von Spidern zu haben Ich schätze Crawling der Website, bekommen die kleinere Version der Website verursacht Ausgabe Caching, um die abgestreifte Datei zu dienen.

+0

@Svend wussten Sie auch, dass das Ändern des Benutzeragenten die Ausgabe bei der Bündelung/Verkleinerung ändern kann? Abgedeckt in [dieser SO-Post] (http://stackoverflow.com/q/21991736/1810243) und etwas ausführlicher [in diesem Blogpost] (http://www.mikesmithdev.com/blog/aspnet-bundling) -changes-output-with-user-agent-eureka-1 /). – MikeSmithDev

+0

@MikeSmithDev Nein, aber ich bin nicht überrascht. Ich habe vorher mit Phantomjs und diesem "Feature" gerungen. Die aktuelle Inkarnation, die ich betrachte, ist HTML-Text-Encoding, wir sehen 'ø' entweder als à ¸ in Chrome oder ø in IE gerendert, das Lustige ist, dass wenn wir die Website lokal ausführen, das Rendering umgekehrt ist (IE erhält die zwei Entitäten, während Chrome die eine erhält). – Svend

+2

@MikeSmithDev Die Verwendung der Browsercap-Datei zum Umschalten der Funktionalität ist wahrscheinlich die abscheulichste Sache, die ich in den letzten 10 Minuten in den Web-Technologien gesehen habe. – Svend

Antwort

2

Sie können Clienttarget setzen = "uplevel" in der Seitendirektive oder im Page.Init

<%@ Page ClientTarget="uplevel" ...... %> 

oder

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) _ 
     Handles Me.Init 
    Page.ClientTarget = "uplevel" 
End Sub 

Eine weitere Option ist eine .browser Datei auf Ihrer Website hinzufügen, in der Ordner App_Browsers (ein Standard-Asp.NET-Ordner). Es sollte auf alle Browser mit einem Regex-Ausdruck ausgerichtet werden und irgendwie die normale Browsererkennung durch Hinzufügen von Fähigkeiten deaktivieren. Ich benutze das nur, um das Menü-Steuerelement in Safari richtig darzustellen, aber ich weiß nicht genau, wie dies für alle Ausgaben auf einmal funktioniert.

2

Eine wahnsinnige Problemumgehung, die ich derzeit ausprobiere, ist unsere eigene HttpCapabilitiesDefaultProvider injizieren, die eine statische HttpBrowserCapabilities zurückgibt. Der Trick besteht darin, immer das gleiche Capabilities-Objekt zurückzugeben, also haben wir mit dem Aufruf von base.GetBrowserCapabilities mit IE9 eine Serialisierung mit Newtonsoft erstellt, und durch Speichern dieser Zeichenfolge in der Quelle können wir ein IE9-ähnliches Capabilities-Objekt erstellen Browser initiierte die Anfrage.

public class CustomerHttpCapabilitiesProvider : HttpCapabilitiesDefaultProvider 
{ 
    private const string m_IE9Definition = "{\r\n \"$type\": \"System.Web.Mobile.MobileCapabilities, System.Web.Mobile\",\r\n \"UseOptimizedCacheKey\":..... "; 
    private readonly static Lazy<MobileCapabilities> m_Capabilities = new Lazy<MobileCapabilities>(() => JsonConvert.DeserializeObject<MobileCapabilities>(m_IE9Definition), true); 

    public override HttpBrowserCapabilities GetBrowserCapabilities(HttpRequest request) 
    { 
     return m_Capabilities.Value; 
    } 
} 

und dann den Provider in Application_Start zuweisen:

HttpCapabilitiesBase.BrowserCapabilitiesProvider = new CustomerHttpCapabilitiesProvider(); 

Dies ist jedoch getestet nicht wirklich hat, unsicher, was diese Änderung genau ist die Wirkung.

+0

Klingt für mich nicht wahnsinnig, das klingt am nächsten daran, es so gut wie möglich zu deaktivieren. –