Gibt es eine Möglichkeit zu überprüfen, ob der Benutzer eine andere Version des CSS hat, die von seinem Browser zwischengespeichert wird, und wenn das der Fall ist, zwingen Sie den Browser, die neue Version zu ziehen?
Ich weiß nicht, ob es korrekt verwendet wird, aber ich denke, Sie können das erneute Laden der CSS-Datei mit einer Abfragezeichenfolge erzwingen:
%Vor%Ich erinnere mich, dass ich diese Methode vor Jahren benutzt habe, um ein Nachladen eines Webcam-Bildes zu erzwingen, aber die Zeit ist wahrscheinlich weitergegangen ...
Wenn Sie js nicht verwenden, können Sie den css-Dateinamen in einer Sitzungsvariablen speichern. Wenn eine Anfrage an die Hauptseite gestellt wird, erstellen Sie einfach das CSS-Link-Tag mit dem Namen der Sitzungsvariablen.
Da der ccs-Dateiname anders ist, erzwingen Sie den Download, ohne dass Sie prüfen müssen, was zuvor im Browser geladen wurde.
Dann sollte Ihre StyleSelector.aspx-Datei in etwa so aussehen:
%Vor%Und Ihre StyleSelector.aspx.cs wie folgt:
%Vor%Dies würde dem Benutzer den Inhalt einer CSS-Datei (eigentlich jeder Datei, siehe Sicherheitshinweis) basierend auf Abfragezeichenfolgenargumenten senden. Jetzt besteht der schwierige Teil darin, Conditional GET zu machen, das ist der Phantasiename, um zu überprüfen, ob der Benutzer die Seite im Cache hat oder nicht.
Zunächst einmal empfehle ich Ihnen, HTTP Conditional GET für RSS-Hacker zu lesen, ein großartiger Artikel Das erklärt die Grundlagen des HTTP Conditional GET-Mechanismus. Es ist ein muss lesen , glaube mir.
Ich habe eine ähnliche Antwort (aber mit PHP Code, sorry) auf die SO Frage kann ich" http-Header "verwenden, um zu prüfen, ob eine dynamische Seite geändert wurde . Es sollte einfach sein, den Code von PHP nach C # zu portieren (ich mache es, wenn ich später Zeit habe.)
Sicherheitshinweis: Es ist sehr unsicher, etwas wie ("css /" + cssFileName + ".css") zu tun, da Sie möglicherweise eine relative Pfadzeichenfolge senden und somit dem Benutzer den Inhalt einer anderen Datei senden können. Sie müssen sich überlegen, welche CSS-Datei gesendet werden soll.
Hinweis zum Entwurf: Anstelle einer ASPX-Seite möchten Sie möglicherweise ein % co_de verwenden % oder IHttpModule
, aber dieser Weg funktioniert einwandfrei .
Sie sollten möglicherweise nur eine gemeinsame Vorfahrklasse verwenden, dann können Sie sie bei Bedarf mit einem einzigen js-Befehl umschalten.
%Vor%usw.
Ich mag jeroens Vorschlag, der Stylesheet-URL eine Querystring hinzuzufügen. Sie könnten den Zeitstempel hinzufügen, wenn die Stylesheet-Datei zuletzt geändert wurde. Es scheint mir ein guter Kandidat für eine Hilfsfunktion oder ein benutzerdefiniertes Steuerelement zu sein, das das LINK-Tag für Sie generiert.
Ich weiß, dass die Frage speziell auf C # bezogen war und ich nehme von diesem Windows Server etwas an. Da ich keine dieser Technologien gut kenne, gebe ich eine Antwort, die in PHP und Apache funktioniert, und Sie können etwas davon bekommen.
Wie bereits vorgeschlagen, setzen Sie einfach eine ID oder eine Klasse auf den Rumpf der Seite, abhängig von der spezifischen Anfrage zB (in PHP)
%Vor%Und Ihr CSS kann dies auf Folgendes ausrichten:
%Vor%usw.
Was das Erzwingen des CSS-Downloads anbelangt, könnten Sie dies in Apache mit den Modulen mod_expires oder mod_headers tun - für mod_headers würde dies in .htaccess das Zwischenspeichern von css-Dateien stoppen:
%Vor%Aber da Sie Apache wahrscheinlich nicht verwenden, wird Ihnen das nicht viel helfen: (
Tags und Links c# css asp.net master-pages