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.
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.
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 GMTAlso 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 .]
Sie haben das Attribut "class" zweimal angegeben.
http://img504.imageshack.us/img504/9243/logmytime.pngVon Wohlgeformtheitsbeschränkung: Eindeutige Att Spec :
Ein Attributname darf NICHT mehrmals im selben Start-Tag oder leeren Element-Tag vorkommen.
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?)
Versuchen Sie es mit einem anderen PC, um sicherzustellen, dass Sie kein Cache-Problem haben.
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.
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.
Die Parser für Text / HTML sind toleranter (aufgrund der Geschichte der HTML-Entwicklung).
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
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;