سؤال

هل هناك طريقة للتحقق مما إذا كان المستخدم لديه إصدار مختلف من المغلق مؤقتا من قبل المتصفح و لو حتى تجبر المتصفح إلى سحب النسخة الجديدة ؟

هل كانت مفيدة؟

المحلول

أنا لا أعرف إذا كان هذا هو الاستخدام الصحيح, ولكن أعتقد أنك يمكن أن تجبر تحديث من ملف css باستخدام سلسلة الاستعلام:

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

أذكر أنني استخدمت هذه الطريقة منذ سنوات لفرض تحميل ويب كام صورة ، ولكن الوقت قد انتقلت...

نصائح أخرى

دون استخدام js, يمكنك فقط الحفاظ على css الملف في جلسة متغير.عند طلب الصفحة الرئيسية, يمكنك ببساطة يؤلف css رابط الوسم مع الدورة اسم المتغير.

يجري احتجاز ثاني أكسيد الكربون اسم ملف مختلف, يمكنك فرض العنكبوت لتحميل البرنامج دون الحاجة إلى التحقق من ما كان previusly تحميلها في المتصفح.

كما يروين اقترح هل يمكن أن يكون شيء مثل:

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

ثم StyleSelector.aspx ينبغي أن يكون شيئا من هذا القبيل:

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

و StyleSelector.aspx.cs مثل هذا:

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

وهذا من شأنه أن يرسل المستخدم محتويات ملف CSS (في الواقع أي ملف ، انظر مذكرة الأمن) على أساس سلسلة الاستعلام الحجج.الآن الجزء صعبة هو فعل مشروط الحصول عليها ، وهو يتوهم اسم لفحص إذا كان المستخدم لديه صفحة في ذاكرة التخزين المؤقت أو لا.

أولا أنا أوصي لكم قراءة HTTP المشروط الحصول على آر إس إس المتسللين, مقال رائع يشرح أساسيات HTTP المشروط على آلية.وهو يجب أن تقرأ, صدقني.

لقد نشرت مماثلة الإجابة (ولكن مع رمز PHP, آسف) على ذلك السؤال هل يمكنني استخدام "http" للتحقق مما إذا ديناميكية الصفحة قد تغيرت.وينبغي أن يكون من السهل أن منفذ رمز من PHP الى C# (إن كان في وقت لاحق لدي الوقت.)

مذكرة الأمن:فمن آمن تفعل شيئا مثل ("css/" + cssFileName + ".css") ، كما قد ترسل مسار نسبي سلسلة وبالتالي يمكنك إرسال المستخدم محتوى ملف مختلف.أنت التوصل إلى أفضل طريقة لمعرفة ما CSS الملف إلى إرسال.

ملاحظة التصميم:بدلا من .صفحة aspx قد ترغب في استخدام IHttpModule أو IHttpHandler, لكن هذه الطريقة تعمل على ما يرام.

الجواب عن السؤال 1

يمكن أن تكتب تحكم ملقم وراثة من النظام.ويب.واجهة المستخدم.السيطرة على تجاوز تقديم الطريقة:

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>
...

ربما يجب عليك فقط يشتركان في سلف مشترك الدرجة, ثم يمكنك نفض الغبار مع واحد شبيبة الأمر إذا دعت الحاجة.

<body class="style2">

<body class="style1">

الخ.

أنا مثل جيرون اقتراح إضافة querystring إلى الأنماط URL.هل يمكن إضافة ختم الوقت عندما الأنماط ملف آخر تعديل.يبدو لي مثل مرشح جيد وظيفة مساعد أو التحكم المخصصة التي من شأنها أن تولد الرابط الوسم بالنسبة لك.

أنا أعرف السؤال تحديدا عن C# و أعتقد من أن نظام التشغيل Windows Server من بعض النكهة.منذ أنا لا أعرف أي من تلك التقنيات حسنا, سأعطيك الجواب هذا العمل في PHP و Apache و قد تحصل على شيء من ذلك.

كما اقترح في وقت سابق ، فقط تعيين هوية أو فئة على جسم الصفحة تعتمد على طلب محدد على سبيل المثال (في بي)

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

و CSS الخاص بك يمكن أن الهدف هذا:

body#admin h1 {
   color: red;
}

body#normal h1 {
   color: blue;
}

الخ

أما بالنسبة إجبار CSS تحميل, هل يمكن أن تفعل هذا في أباتشي مع mod_expires أو mod_headers وحدات - على mod_headers هذا في .هتكس وقف css الملفات التي يتم تخزينها مؤقتا:

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

ولكن بما أنك ربما لا تستخدم apache, التي لن تساعدك كثيرا :(

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top