2008-09-19 11 views
8

का उपयोग करने के लिए ब्राउज़र को मजबूर करें क्या यह जांचने का कोई तरीका है कि उपयोगकर्ता के पास उनके ब्राउज़र द्वारा कैश किए गए सीएसएस का एक अलग संस्करण है और यदि ऐसा है तो अपने ब्राउज़र को नया संस्करण खींचने के लिए मजबूर करें?नया सीएसएस

उत्तर

20

अगर यह सही उपयोग है मैं जानता हूँ कि नहीं है, लेकिन मुझे लगता है कि आप सीएसएस फ़ाइल की एक पुनः लोड एक क्वेरी स्ट्रिंग का उपयोग कर के लिए मजबूर कर सकते हैं:

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

मुझे याद है मैं इस विधि का इस्तेमाल किया साल पहले एक वेब कैमरा छवि का एक बार पुनः लोड करने के लिए मजबूर करने के लिए, लेकिन समय शायद पर ले जाया गया है ...

0

आपको संभवतः एक सामान्य पूर्वज वर्ग साझा करना चाहिए, तो यदि आवश्यकता हो तो आप इसे एक जेएस कमांड के साथ फ्लिक कर सकते हैं।

<body class="style2"> 

<body class="style1"> 

आदि

4

js का उपयोग कर के बिना, आप सिर्फ एक सत्र चर में सीएसएस फ़ाइल नाम रख सकते हैं। जब मुख्य पृष्ठ पर अनुरोध किया जाता है, तो आप बस सत्र चर नाम के साथ सीएसएस लिंक टैग लिखते हैं।

सीसीएस फ़ाइल नाम अलग होने के नाते, आप ब्राउजर में प्रीवीसली लोड होने की जांच किए बिना इसे डाउनलोड करने के लिए ब्रोसर को मजबूर करते हैं।

0

मुझे पता है कि सवाल विशेष रूप से सी # के बारे में था और मुझे लगता है कि कुछ स्वाद के विंडोज सर्वर से मुझे लगता है। चूंकि मैं उन तकनीकों में से किसी एक को अच्छी तरह से नहीं जानता, इसलिए मैं एक उत्तर दूंगा जो PHP और अपाचे में काम करेगा, और आप इससे कुछ प्राप्त कर सकते हैं।

पहले सुझाव दिया, बस एक आईडी या पेज के शरीर पर एक वर्ग विशिष्ट क्वेरी जैसे पर निर्भर है (PHP में)

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

स्थापित करने और अपने सीएसएस इस लक्षित कर सकते हैं:

body#admin h1 { 
    color: red; 
} 

body#normal h1 { 
    color: blue; 
} 

आदि

सीएसएस डाउनलोड के लिए मजबूर कर के रूप में, आप mod_expires या mod_headers मॉड्यूल के साथ अपाचे में ऐसा कर सकता है - mod_headers के लिए, .htaccess में इस सीएसएस फ़ाइलें कैश किया जा रहा बंद कर देंगे घ:

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

लेकिन चूंकि आप शायद अपाचे उपयोग नहीं कर रहे हैं, कि आप में मदद नहीं करेगा ज्यादा :(

1

प्रश्न के लिए उत्तर 1

आप एक सर्वर नियंत्रण लिख सकता है System.Web.UI.Control से ओवरराइडिंग विधि:

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\" />") 

    } 

} 

और अपने masterpage में इस वर्ग का एक उदाहरण सम्मिलित करें:

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

jeroen suggested के रूप में आप की तरह somthing हो सकता है:

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

फिर आपका स्टाइल चयनकर्ता।

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

और अपने StyleSelector.aspx.cs इस तरह:: aspx फ़ाइल कुछ इस तरह होना चाहिए

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"); 
     } 
    } 
} 

इस उपयोगकर्ता एक सीएसएस फ़ाइल (वास्तव में किसी भी फ़ाइल की सामग्री को भेजना होगा, सुरक्षा देखना नोट) क्वेरी स्ट्रिंग तर्कों के आधार पर। अब मुश्किल हिस्सा सशर्त जीईटी कर रहा है, यह जांचने के लिए फैंसी नाम है कि उपयोगकर्ता के पास कैश में पृष्ठ है या नहीं।

सबसे पहले मैं आपको HTTP Conditional GET for RSS hackers पढ़ने की अत्यधिक अनुशंसा करता हूं, एक महान लेख जो HTTP सशर्त जीईटी तंत्र की मूल बातें बताता है। यह पढ़ना चाहिए, मेरा विश्वास करो।

मैंने SO12 can i use “http header” to check if a dynamic page has been changed पर similar answer (लेकिन PHP कोड, माफ करना) पोस्ट किया है। यह बंदरगाह करने के लिए आसान सी # करने के लिए PHP से कोड (। यदि बाद में मैं समय मैं यह करूँगा) होना चाहिए

सुरक्षा नोट: यह अत्यधिक असुरक्षित तरह ("सीएसएस /" + cssFileName + "कुछ कर रही है। सीएसएस "), क्योंकि आप एक सापेक्ष पथ स्ट्रिंग भेज सकते हैं और इस प्रकार आप उपयोगकर्ता को एक अलग फ़ाइल की सामग्री भेज सकते हैं। सीएसएस फ़ाइल भेजने के लिए आपको एक बेहतर तरीके से आना होगा।

डिज़ाइन नोट: एक .aspx पृष्ठ के बजाय आप IHttpModule या IHttpHandler का उपयोग करना चाहेंगे, लेकिन यह तरीका ठीक काम करता है।

0

मुझे स्टाइलशीट यूआरएल में क्वेरीस्ट्रिंग जोड़ने के लिए जेरोइन के सुझाव पसंद हैं। जब स्टाइलशीट फ़ाइल को अंतिम बार संशोधित किया गया था तो आप समय टिकट जोड़ सकते थे। ऐसा लगता है कि मुझे एक सहायक काम या कस्टम नियंत्रण के लिए एक अच्छे उम्मीदवार की तरह लगता है जो आपके लिए लिंक टैग उत्पन्न करेगा।

संबंधित मुद्दे