2014-07-25 16 views
6

Ich habe eine .Net-Webanwendung, die eine web.config-Einstellung enthält, damit Internet Explorer den Kompatibilitätsmodus deaktiviert und die neueste Version von IE verwendet verfügbar:Überschreibe X-UA-kompatible Einstellungen in web.config für bestimmte Seiten und Frames

<system.webServer> 
    <httpProtocol> 
    <customHeaders> 
     <add name="X-UA-Compatible" value="IE=Edge" /> 
    </customHeaders> 
    </httpProtocol> 
</system.webServer> 

Diese Anwendung enthält jedoch eine Legacy-Seite, die den Kompatibilitätsmodus erfordert. In meinen Tests wird es nur richtig angezeigt, wenn X-UA-Compatible auf IE=5 eingestellt ist.

Gibt es eine Möglichkeit, die Einstellung web.config für eine einzelne Seite zu überschreiben?

Unter den vielen Dingen, die ich versucht habe, die nicht gearbeitet haben:

  • Einschließlich <meta http-equiv="X-UA-Compatible" content="IE=5" /> auf der Seite selbst, als den ersten Tag nach <head>
  • X-UA-Compatible:IE=5 auf die Response-Header hinzufügen. Leider sendet es auch den Header X-UA-Compatible:IE=Edge, und dieser "gewinnt".
  • Ändern der <!DOCTYPE >. Ich habe alle möglichen Optionen ausprobiert.
  • Hinzufügen eines Kommentars vor dem DOCTYPE
  • Umschreiben der Seite als standardkonform. Dies ist offensichtlich die beste Lösung, aber die fragliche Seite ist eine komplexe Kartenanwendung, und das Umschreiben wird mehrere Monate dauern.

aktualisieren
Als ich dies als „eine komplexe Mapping-Anwendung:“ Ich hätte sagen sollen „ein Rattennest von Frames und Tabellen.“ Es stellt sich heraus, dass der Rahmen Teil für die Lösung relevant war.

+1

Haben Sie versucht, den vorhandenen X-UA-kompatiblen Header zuerst zu entfernen, bevor Sie den zweiten Header aus der Header-Sammlung hinzufügen? Haben Sie auch versucht, den Doctype vollständig zu entfernen? –

+0

Ich hatte beide Vorschläge bereits ausprobiert, aber Ihr Vorschlag, die Header zu löschen, spornte mich an, dasselbe auf allen Frames zu versuchen, also danke! – xcer

Antwort

8

ich diese festen endlich durch diesen Code in der Page_Load setzen() auf jeder Seite, den Teil des Frame-Sets für diese Seite (etwa a Dutzend Seiten insgesamt).

Ich hatte angenommen, dass die Frameset-Seiten die Einstellung von der Hauptseite erben würden, aber anscheinend nicht. Das nur auf die Hauptseite zu stellen, funktionierte nicht, ich musste es auf jede Seite/jeden Frame setzen.

1

Sie könnten versuchen, einen Standort-Tag ...

<location path="YourPage.aspx"> 
    <system.webServer> 
     <httpProtocol> 
      <customHeaders> 
      <add name="X-UA-Compatible" value="IE=5" /> 
      </customHeaders> 
     </httpProtocol> 
    </system.webServer> 
</location> 
+2

Ich hatte dies versucht, aber ich konnte eine Syntax nicht herausfinden, die mir auch erlauben würde, als Standard für den Rest der Seite? ˅. Wie schließe ich beides ein? – xcer