Warum analysiert Opera meine Webseite als XML?

7

Ich habe gerade versucht, meine Website Ссылка in Opera (Version 10.50) zu sehen, es gibt mir einen "xml parsing failed error" und lehnt ab Anzeige der Webseite

Ich kann wählen "Repariert das Dokument als HTML" und dann funktioniert die Seite gut, aber das ist keine Lösung für mein Problem.

Das Seltsame ist, dass der Fehler immer noch auftritt, nachdem ich einen HTML-Doctyp (statt XTHML) eingestellt habe:

%Vor%

Ich habe die Quellausgabe vom Browser überprüft, um sicherzustellen, dass ich keinen Fehler mit dem Doctype gemacht habe. Ich habe sogar die gleiche Webseite in Firebug angesehen und es zeigt einen Content-Type von text / html; .

Also, warum versucht Opera immer noch, meine Webseite als XML zu analysieren?

Danke,

Adrian

Bearbeiten: Nur um zu verdeutlichen: Ich frage nicht, was der Fehler auf meiner Webseite ist. Ich verstehe, warum das XHTML nicht gültig ist. Allerdings benutze ich auch die JavaScript-Vorlage für Mikro-Templating , und es sind Templates niemals gültiges XML, weshalb Ich brauche den Browser, um meine gesamte Website als HTML und nicht als XHTML zu analysieren. Um dies zu demonstrieren, habe ich einfach eine Beispielvorlage in die Webseite eingefügt.

%Vor%

Beim Öffnen der Seite in Opera können Sie sehen, dass die Vorlage jetzt XML-Analysefehler erzeugt, obwohl der Dokumenttyp für die Seite immer noch HTML ist.

Edit 2: Um das noch deutlicher zu machen: Ich frage nicht, warum meine Webseite kein gültiges XHTML ist. Ich frage, warum Opera versucht, es trotz des HTML-Doctype als XHTML zu analysieren.

Edit3: : Bitte posten Sie keine weiteren Antworten, ich habe die Ursache dafür gefunden und dokumentiert es unten.

    
Adrian Grigore 04.05.2010, 15:49
quelle

10 Antworten

5

Falls jemand anderes das gleiche Problem hat: Wie von DeveloperArt vorgeschlagen, kann es mit einem einfachen ContentType="text / html" Attribut im Seitenelement behoben werden.

Bearbeiten: Das Problem wurde tatsächlich durch einen Fehler mit der Datei "mobile.Browser" verursacht, die ich in meinem Webprojekt verwende. Der obige Workaround funktioniert, ist aber in meinem Fall nicht wirklich notwendig. Siehe diese Antwort für weitere Details.

    
Adrian Grigore 04.05.2010, 22:47
quelle
13

Ihr Dokument ist kein gültiges HTML-Dokument. Also sollte der Browser es ablehnen. Leider, aufgrund eines historischen Unfalls, lehnen die meisten Browser ungültige Dokumente nicht ab, sondern versuchen sie zu beheben (normalerweise mit ziemlich beschissenen Ergebnissen), so dass der Autor niemals bemerkt, dass sein Dokument beschädigt ist.

Glücklicherweise haben die Browser-Anbieter mit XHTML beschlossen, das zu beheben und ungültige Dokumente abzulehnen. In Ihrem Fall liefern Sie Ihr Dokument als XHTML mit dem application/xhtml+xml MIME-Typ:

# curl --head http://www.logmytime.de/
HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 12529
Content-Type: application/xhtml+xml; charset=utf-8
              ^^^^^^^^^^^^^^^^^^^^^
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 2.0
X-AspNet-Version: 2.0.50727
Set-Cookie: Referrer=None; path=/
X-Powered-By: ASP.NET
Date: Tue, 04 May 2010 16:08:40 GMT
Also lehnt der Browser Ihr Dokument ab (wie es sollte). Wenn Sie zu HTML wechseln, wird versucht, Ihr fehlerhaftes HTML zu reparieren.

Nun haben Sie Ihre DOCTYPE in HTML 4.01 geändert, aber Sie noch liefern es als XHTML. Alles, was Sie jetzt erreicht haben, ist, dass es zwei Gründe gibt, dass der Browser Ihr Dokument ablehnt: es ist immer noch ungültig, weil Sie den Fehler und nicht behoben haben DOCTYPE und der MIME-Typ stimmt nicht überein.

Anstatt mit DOCTYPE s und MIME-Typen herumzuspucken, damit der Browser Ihr beschädigtes Dokument parsen kann, wäre die richtige Möglichkeit, das ungültige Markup zu beheben und Entfernen Sie das überflüssige Attribut class in Zeile 172. [BTW: Wer hat dieses Dokument geschrieben? Die Einrückung und Formatierung ist schrecklich .]

    
Jörg W Mittag 04.05.2010 16:25
quelle
7

Sie haben das Attribut "class" zweimal angegeben.

http://img504.imageshack.us/img504/9243/logmytime.png

Von Wohlgeformtheitsbeschränkung: Eindeutige Att Spec :

  

Ein Attributname darf NICHT mehrmals im selben Start-Tag oder leeren Element-Tag vorkommen.

    
user151323 04.05.2010 15:51
quelle
5

Sie haben die richtige Antwort erhalten (HTTP-Content-Type-Header, der das XML-Parsing vorschreibt), und es scheint, dass es behoben ist. Ich füge nur einen kleinen Hinweis hinzu, wie Sie in Opera selbst herausfinden können, was nicht stimmt. Zwei mögliche Wege:

1) Infobereich

Dies ist standardmäßig nicht sichtbar, aber wenn Sie die Panel-Leiste auf der linken Seite öffnen (drücken Sie F4, um zu wechseln, wenn Sie es nicht sehen), dann klicken Sie auf das kleine Plus-Zeichen unten, Sie können "Info" aktivieren im Menü.

Das Infofeld zeigt einige Informationen über die aktuell geöffnete Seite an, einschließlich Codierung und MIME-Typ.

2) Opera Dragonfly

Drücken Sie Strg-Umschalt-I, um die Entwicklerwerkzeuge zu öffnen (oder gehen Sie durch die Menüs zu Extras & Erweitert; Opera Dragonfly)

Gehen Sie zur Registerkarte "Netzwerk" und laden Sie die Site erneut. Sie sehen die Anfrage und können die Kopfzeilen überprüfen. Wenn Sie dies mit den entsprechenden Informationen von Firebug vergleichen, hätten Sie den Unterschied in Content-Type-Headern erkannt. (Hier sehen Sie auch, dass Opera einen "Accept" Header sendet, der "application / xhtml + xml" enthält. Das bedeutet "Hallo Server, wenn Sie diese Datei im echten XHTML Format haben, würde ich das gut verstehen.". Vielleicht hat Ihr serverseitiges Framework diesen Header gesehen und fälschlicherweise mit dem XHTML-Inhaltstyp geantwortet, obwohl der Inhalt ungültig war?)

    
hallvors 07.05.2010 12:25
quelle
1

Es sieht so aus, als ob der Server verschiedenen Benutzer-Agenten unterschiedliche Mime-Typen anbietet. Firefox bekommt Text / html, aber Opera (und curl nach Jörg W Mittag) bekommt application / xhtml + xml. Haben Sie Content-Negotiation-Code für Ihre Website?

    
Alohci 04.05.2010 16:32
quelle
0

Versuchen Sie es mit einem anderen PC, um sicherzustellen, dass Sie kein Cache-Problem haben.

    
Chris Thornton 04.05.2010 15:51
quelle
0

Der Seitencode wird in Ihrem Browser zwischengespeichert, weshalb Sie den Fehler weiterhin sehen. Sie haben den Fehler ursprünglich gesehen, weil Ihr Code wahrscheinlich nicht gültig ist.

    
austin cheney 04.05.2010 15:52
quelle
0

Es ist, weil du es irgendwie gesagt hast ...

%Vor%     
Fenton 07.05.2010 12:30
quelle
0

application / xhtml + xml

Wenn der Server die Seite als application / xhtml + xml sendet, parst der Browser sie als XML nach Spezifikation. Beim Parsen als XML stoppt der erste Fehler bei der XML-Wohlgeformtheit das Parsen und der Client (Browser) zeigt normalerweise eine Fehlermeldung an.

text / html

Die Parser für Text / HTML sind toleranter (aufgrund der Geschichte der HTML-Entwicklung).

Ändern des Mime-Typs

Um den vom Server gesendeten Inhaltstyp zu ändern, müssen Sie den HTTP-Header-Wert überschreiben: Content-Type. Dies kann durch eine Skriptsprache auf der Serverseite oder manchmal in der Konfiguration des Servers wie Apache erfolgen. Ich weiß nicht, wie Microsoft-IIS / 7.5 auf einer URI-Basis spezifizieren kann.

Inhaltstyp: application / xhtml + xml; charset = utf-8 oder Inhaltstyp: text / html; charset = utf-8

    
karlcow 12.11.2010 02:51
quelle
0

Dies tritt meistens bei ASP.NET auf, wenn der Inhaltstyp für oper als application / xhtml + xml festgelegt wird. Um dieses Problem zu überwinden. Sie müssen den Inhaltstyp auf text / html einstellen. Die beste Möglichkeit, dieses Problem zu beheben, besteht darin, der .browser-Konfigurationsdatei für Oper in der App_Browser-Datei den folgenden Code hinzuzufügen.

& lt; Fähigkeitsname="preferredRenderingMime" value="text / html" / & gt; & lt; Fähigkeitsname="preferredRenderingType" value="html32" / & gt; & lt; Fähigkeitsname="SupportsXhtmlRendering" value="false" / & gt;

    
getsrirams 30.05.2011 06:35
quelle

Tags und Links