2010-11-18 3 views
1
<link type="text/css" media="all" rel="stylesheet" href="./foo.css.txt" /> 


Firbug FehlerMIME-Typ: Verknüpfung mit CSS w/txt-Erweiterung


Das Stylesheet foo.css.txt wurde nicht wegen seiner MIME-Typ "text/plain" geladen, ist nicht "text/css".


Erklärung


Der Browser die CSS als Textdokument interpretiert und nicht als ein CSS, trotz jeder Anstrengung, die es zu zwingen, ist MIME über den Browser. Natürlich werde ich in der Produktion foo.css (ohne die TXT-Erweiterung) verwenden, aber ich würde denken, dass dies möglich wäre. Es funktioniert für JavaScript:

<script type="text/javascript" src="./index.js.txt"></script> 


Andere Gedanken


  • type="css" Einstellung keinen Fehler in Firebug zeigen und die Seite überprüft, aber die CSS nicht korrekt geladen - Ich bin mir ziemlich sicher, dass das kein gültiger MIME-Typ ist. Ich habe versucht, eine Liste der MIME-Typen aus W3C zu finden, aber wie bei allem ist es schwer zu finden/verstehen W3C

  • Dies funktioniert mit anderen, weniger populären, Erweiterungen wie dat: href="./foo.css.dat"

Antwort

5

Wenn Sie das Attribut type in HTML verwenden, sagen Sie "Wenn Sie diese Ressource abrufen, erwarten Sie, um diese Art von Daten zu erhalten." Dadurch können Benutzeragenten (wie z. B. Browser) vermeiden, Ressourcen anzufordern, von denen sie wissen, dass sie nicht damit umgehen können. Für CSS müssen Sie dies auf text/css setzen.

Wenn der Server auf die Anfrage antwortet, sagt der HTTP Content-Type Header "Dieser Inhalt ist dieses Typs". Es ist kanonisch und muss für CSS-Daten auch auf text/css gesetzt werden.

Da Sie eine TXT-Datei verwendet haben, sagt der Server (in einer Standardkonfiguration), dass die Datei Daten enthält, die text/plain ist, so dass es dem Browser sagt. Sie können dies nicht über den Browser überschreiben.

Es funktioniert für JavaScript

Browser, aus verschiedenen Gründen, neigen dazu, den Content-Type von Servern für JavaScript angegeben zu ignorieren. Dies könnte in diesen Browsern als Fehler angesehen werden.

Einstellung type = „css“ nicht einen Fehler in Firebug und die Seite überprüft, aber die CSS nicht ordnungsgemäß geladen wird - ich bin ziemlich sicher, das ist kein gültiger MIME-Typ obwohl

css ist kein registrierter MIME-Typ, der Browser erkennt es nicht als Stylesheet-Sprache, die es verstehen kann, also versucht es nicht, es herunterzuladen.

Ich habe versucht, eine Liste der MIME-Typen aus W3C zu finden, aber wie bei allem ist es schwer zu finden/verstehen W3C

Das W3C ist nicht verantwortlich für die MIME-Typ-Registrierung, wo Sie finden Sie unter http://www.iana.org/assignments/media-types/

+0

Ich denke, die eigentliche Frage, die ich nicht berücksichtigt habe, ist: "Ist es möglich, dies auf der HTML-Seite zum Laufen zu bringen?" Ich bin ziemlich sicher, dass ich den Inhaltstyp in Apache für txt-Dateien in der Vergangenheit geändert habe , aber ich möchte sehen, ob es eine schnelle und einfache Möglichkeit gibt, etwas zum "link" -Element hinzuzufügen. - Ich werde testen, was passiert, wenn CSS-Dateien mit JavaScript geladen werden. – vol7ron

+0

Nein, es gibt nichts, was Sie schnell und einfach zum Verknüpfungselement hinzufügen können, wie ich bereits sagte: "Sie können dies nicht vom Browser aus ändern." – Quentin

0

Wenn Sie .php anstelle von .txt verwenden könnten, könnten Sie den Typ innerhalb der Datei selbst festlegen.

+0

(siehe den Kommentar, den ich für RDL verließ) – vol7ron

+0

Okay. Der einzige andere Weg, den ich mir vorstellen kann, ist das Ändern der Handhabung von Dateien über Apache, aber Sie sagen, dass Sie sich davon fernhalten wollen. – Damien

+0

Ja, um eine spezielle Konfiguration für TXT-Dateien zu vermeiden :) Dies ist lediglich eine Übung, kein Produktionsfall. – vol7ron

0

Versuchen Sie, eine serverseitige Erweiterung wie .php

In diesem Fall verwenden Sie den MIME-Typ in dem Dokument selbst festlegen können.

+0

Dies ist nicht um es zu bekommen etwas zu arbeiten, das ist es mit ".txt" zu arbeiten, ohne die Server-Konfiguration zu ändern. – vol7ron

1

Falls jemand dies noch tun möchte, kann es mit JavaScript erfolgen. Hier ist eine grobe jQuery Lösung:

+0

Interessantes Beispiel - rufen Sie die Datei als Text und erstellen Sie das STYLE-Element um es herum. Es ist eine Weile her, aber ich denke, der Grund, warum ich das gemacht habe, war, js/css-Dateien schnell zu debuggen und zu durchsuchen, ohne irgendeine Betriebssystem-Dateityp-Assoziation zu ändern. Auf diese Weise könnte das OS noch eine 'js'-Datei ausführen, würde aber eine' js.txt' in etwas wie Notepad öffnen. Das CSS war wahrscheinlich für Konsistenz. – vol7ron