2012-03-26 17 views
1

Ich habe das verrückteste Problem mit Firefox. Ich bin mir nicht sicher, ob dieses Problem von Firefox selbst oder von meinem benutzerdefinierten Webserver (in Delphi erstellt) oder was es sein könnte. Dieses Problem tritt nur in Firefox (und Opera) auf, wo es sowohl alles vom Kopf bis zum Körper bewegt als auch zufällige Zeichen am Anfang des Körpers hinzufügt. Seltsamerweise macht es das sogar mit einer komplett 100% leeren Webseite.Firefox Header zu zerstören und zufällige Zeichen

Ich bin mit einer Seite so einfach wie diese Prüfung:

<html> 
<head> 
    <title>Test</title> 
</head> 
<body> 

</body> 
</html> 

Wie für den Web Server, Ich baue eine benutzerdefinierte HTTP-App in Delphi mit IdHTTPWebBrokerBridge (Indy) und einfach die ContentStream ersetzen (oder Content) des Request wie so ...

procedure TDashModule.DashConsoleHomeAction(Sender: TObject; 
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); 
begin 
    Response.ContentType:= 'text/html'; 
    Response.ContentStream:= TFileStream.Create('C:\SomeDir\SomeFile.html', fmOpenRead or fmShareDenyNone); 
end; 

... wo SomeFile.html ist die leere Seite, wie oben geschrieben, und das Verfahren ist ein Event-Handler für die Standard-Request-Handler.

In Chrome, IE, Safari usw. zeigt alles genau wie der ursprüngliche Code. Firefox (und Opera) jedoch produzieren diese:

<html> 
<head> 
</head> 
<body> 
 
<title>Test</title> 
</body> 
</html> 

Wie Sie sehen können, die title Tag wurde der body nach unten bewegt wird, und einige zufällige Zeichen  sind ganz am Anfang des Körpers erscheinen. Wenn die rohe Seite in Firefox als Originaldatei angezeigt wird, wird sie korrekt angezeigt. Aber wenn ich meinen Webserver in Delphi verwende, zerstört Firefox diese Seite (und alle anderen Seiten).

Was könnte das tun und wie es zu beheben?

Schritte

A) Erstellen Sie eine neue HTML-Seite (für mich in Visual Studio 2010) zu reproduzieren, mit eben diesen Inhalt:

<html> 
<head> 
    <title>Test</title> 
</head> 
<body> 

</body> 
</html> 

B) In Delphi XE2, startet ein neues Projekt : File > New > Other... > Web Broker > Web Server Application

C) wählen Sie Stand-alone VCL Application> Weiter> Fertig

D) eine def erstellen Ault Handler (Rechtsklick auf WebModule1 und wählen Action Editor...)

E) Für DefaultHandler Artikel, gehen Sie zu den Eigenschaften von Ereignis und gehen Sie auf die Event-Handler für OnAction

F) Ersetzen Sie alle Code, der mit dieser bereits vorhanden ist (ersetzen Dateiname mit HTML-Dateiname):

Response.ContentStream:= TFileStream.Create('C:\SomeDir\SomeFile.html', fmOpenRead or fmShareDenyNone);

E) Run-Anwendung und klicken Sie auf "Show In Browser" - kopieren/einfügen der URL zu Firefox, falls erforderlich.

UPDATE

Dank der Hilfe, ich bin gekommen, das Problem ist, mit dem BOM-Tag der Datei zu erkennen, die dort nicht hingehörte.Es war aufgrund der TFileStream funktioniert, lädt es jedes kleine Stück der Datei, die diesen Code enthalten. Ich habe meine Methode geändert, um stattdessen TStringList.LoadFromFile() zu verwenden, da dies automatisch erkannt wird und ich kann auch TStringList.Text lesen, um Response.Content zuzuweisen.

+0

alle Kommentare gegangen? – OnTheFly

+0

Es scheint so, obwohl einige Kommentare aus der Kritik und Sarkasmus waren, andere waren sehr detailliert und sollten nicht gelöscht werden. –

+1

Kritik ist nicht ** das ** schlecht :-) Wie auch immer, es scheint, dass all diese "geheimestaatsmoderation" wenig außer Kontrolle geraten ist. – OnTheFly

Antwort

7

Anscheinend those three characters constitute a Unicode UTF-8 Byte-Order Mark. Sie sollen am Anfang einer Datei stehen und nicht wirklich gerendert werden; Sie sind Metadaten, mit denen der Textinterpreter die verwendete Codierung erkennen kann. Keine Ahnung, warum Sie eine in der Mitte Ihrer Datei sehen, obwohl! Versuchen Sie, das Original in einem Hex-Editor zu öffnen und zu prüfen, ob darin eine Stückliste eingebettet ist.

(Falls Sie nicht über einen Hex-Editor haben, können Sie eine sehr gute kostenlose ein here bekommen. Es ist sogar in Delphi geschrieben!)

+2

Der wahrscheinlichste Grund für die Stückliste in der '' erscheint, wenn die Datei mit Leerzeichen beginnt, gefolgt von einer Stückliste .... –

+0

Das Problem, dass es in den Körper verschoben wird, muss Firefox verwirrt und denken, dass dies "Text" gehört in das "body" -Tag, und während es dabei ist, denkt irgendwie, dass alles im "head" -Tag damit einhergehen sollte. –

+0

@jerry: Das könnte sein. Hast du das Problem bereits mit einem Hex-Editor verifiziert? –

2

Diese 3 Zeichen sind die UTF-8-Stückliste. Die Stückliste sollte nicht da sein. Ich kann nicht sagen, woher es kommt (vielleicht stammt es aus der Datei), aber Sie müssen es entfernen.

Der Fehler ist aber sicherlich an Ihrem Ende! Lassen Sie sich nicht davon abbringen, dass IE und die Webkit-Browser die Seite gut anzeigen. Das bedeutet nur, dass diese Browser nachsichtig sind.