Domanda

C'è un modo per verificare se l'utente ha una versione diversa del CSS di cache del browser e se è così a forzare il loro browser per estrarre la nuova versione?

È stato utile?

Soluzione

Non so se è corretto l'utilizzo, ma penso che si può forzare il caricamento dei file css utilizzando una stringa di query:

<link href="mystyle.css?SOME_UNIQUE_TEXT" type="text/css" rel="stylesheet" />

Mi ricordo che ho usato questo metodo di anni fa per forza una ricarica di una web-cam immagine, ma il tempo ha probabilmente spostato su...

Altri suggerimenti

Senza l'utilizzo di js, si può solo tenere il css nome in una variabile di sessione.Quando viene effettuata una richiesta alla Pagina Principale, è sufficiente comporre il css tag link con il nome della variabile di sessione.

Essendo il ccs nome di file diverso, di cui si forza il browser a scaricare senza bisogno di controllare ciò che è stato previusly caricata nel browser.

Come jeroen suggerito si può avere qualcosa come:

<link href="StyleSelector.aspx?foo=bar&baz=foz" type="text/css" rel="stylesheet" />

Quindi il tuo StyleSelector.file aspx, dovrebbe essere qualcosa di simile a questo:

<%@ Page Language="cs" AutoEventWireup="false" Inherits="Demo.StyleSelector" Codebehind="StyleSelector.aspx.cs" %>

E il tuo StyleSelector.aspx.cs come questo:

using System.IO;

namespace Demo
{
    public partial class StyleSelector : System.Web.UI.Page
    {
        public StyleSelector()
        {
            Me.Load += New EventHandler(doLoad);
        }

        protected void doLoad(object sender, System.EventArgs e)
        {
            // Make sure you add this line
            Response.ContentType = "text/css";

            string cssFileName = Request.QueryString("foo");

            // I'm assuming you have your CSS in a css/ folder
            Response.WriteFile("css/" + cssFileName + ".css");
        }
    }
}

Questo permetterebbe di inviare all'utente il contenuto di un file CSS (in realtà qualsiasi tipo di file, vedere la nota di sicurezza) basato su argomenti di stringa di query.Ora la parte difficile è fare il GET Condizionale, che è il nome di fantasia per controllare se l'utente ha la pagina in cache o non.

Prima di tutto vi consiglio vivamente la lettura HTTP GET Condizionale per RSS hacker, un ottimo articolo che spiega le nozioni di base HTTP GET Condizionale meccanismo.Si tratta di un deve leggere, mi creda.

Ho postato un risposta simile (ma il codice PHP, sorry) la domanda posso utilizzare “http header” per verificare se una pagina dinamica è stata modificata.Dovrebbe essere facile porta il codice PHP, C#, (lo faccio se ho il tempo).

Nota di sicurezza:è altamente insicuro fare qualcosa di simile ("css/" + cssFileName + ".css"), come si può inviare una relativa stringa di percorso, e quindi si può inviare il contenuto di un file diverso.Si sta per venire con un modo migliore per scoprire che cosa CSS file da inviare.

Progettazione di nota:invece di una .pagina aspx che si potrebbe desiderare di utilizzare un IHttpModule o IHttpHandler, ma in questo modo funziona bene.

Risposta per la domanda 1

Si potrebbe scrivere un Di Controllo Del Server eredita da System.Web.Interfaccia utente.Controllo override del Rendering metodo:

public class CSSLink : System.Web.UI.Control
{

    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {

        if ( ... querystring params == ... )
            writer.WriteLine("<link href=\"/styles/css1.css\" type=\"text/css\" rel=\"stylesheet\" />")
        else
            writer.WriteLine("<link href=\"/styles/css2.css\" type=\"text/css\" rel=\"stylesheet\" />")

    }

}

e inserire un'istanza di questa classe nel tuo MasterPage:

<%@ Register TagPrefix="mycontrols" Namespace="MyNamespace" Assembly="MyAssembly" %>
...
<head runat="server">
    ...
    <mycontrols:CSSLink id="masterCSSLink" runat="server" />
</head>
...

Si dovrebbe forse solo condividere un antenato comune classe, quindi è possibile scorrere con un singolo comando js, se necessario.

<body class="style2">

<body class="style1">

ecc.

Mi piace jeroen suggerimento di aggiungere una querystring il foglio di stile URL.Si potrebbe aggiungere l'ora in cui il foglio di stile ultima modifica di un file.Mi sembra un buon candidato per una funzione di supporto o di controllo personalizzato che dovrebbe generare il tag LINK per voi.

So che la domanda è stata specificamente su C# e presumo da quello di Windows Server del gusto.Dal momento che non lo so nemmeno io di queste tecnologie che bene, ti darò una risposta che lavorerà in PHP e Apache, e si può ottenere qualcosa.

Come suggerito in precedenza, basta impostare un ID o una classe nel corpo della pagina dipende specifica query di esempio (in PHP)

<?php
if($_GET['admin_page']) {
  $body_id = 'admin';
} else {
  $body_id = 'normal';
}
?>
...
<body id="<?php echo $body_id; ?>">
...
</body>

E il CSS può mirare a questo:

body#admin h1 {
   color: red;
}

body#normal h1 {
   color: blue;
}

ecc

Come per la forzatura di CSS scaricare, si potrebbe fare questo in Apache con il mod_expires o mod_headers moduli - per mod_headers, questo in .htaccess si sarebbe fermata css file memorizzati nella cache:

<FilesMatch "\.(css)$">
Header set Cache-Control "max-age=0, private, no-store, no-cache, must-revalidate"
</FilesMatch>

Ma dal momento che si sta probabilmente non si utilizza apache, che non vi aiuterà molto :(

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top