2016-03-30 18 views
1

Kendo UI kullanan ve kullanıcının temaları değiştirmesine izin veren bir web uygulamasına sahibiz. Her bir farklı Kendo teması için özel bir CSS sayfası eklememiz gerekti.jQuery Her Zaman Stil Sayfasını Önbellekten Yükler

Özel stil sayfalarımızı yüklemek için jQuery appendTo ("kafa") kullanıyoruz. Sorun şu ki, bu sayfalarda değişiklik yaptığımızdan, jQuery onları gerçekten değiştiğinde bile önbellekten yüklemeye devam ediyor. Bu sorunu özellikle Google Chrome'da yaşıyoruz. Başka tarayıcıları test etmedim, ancak sorunun diğer tarayıcılarda da var olduğundan şüpheleniyorum. css url ucundaki bir zaman damgası ekleyerek

function changeTheme(skinName, animate) { 
var doc = document, 
    kendoLinks = $("link[href*='kendo.']", doc.getElementsByTagName("head")[0]), 
    commonLink = kendoLinks.filter("[href*='kendo.common']"), 
    skinLink = kendoLinks.filter(":not([href*='kendo.common'])"), 
    href = location.href, 
    skinRegex = /kendo\.\w+(\.min)?\.css/i, 
    vmSkinRegex = /kendo\.\w+(\.min)?\.css/i, 
    extension = skinLink.attr("rel") === "stylesheet" ? ".css" : ".less", 
    url = commonLink.attr("href").replace(skinRegex, "kendo." + skinName + "$1" + extension), 
    vmUrl = commonLink.attr("href").replace(vmSkinRegex, "kendo." + skinName + "$1" + ".vm" + extension); 

vmUrl = vmUrl.replace(".min", ""); 

function preloadStylesheet(file, callback) { 
    var element = $("<link rel='stylesheet' media='print' href='" + file + "' />").appendTo("head"); 

    setTimeout(function() { 
     callback(); 
     element.remove(); 
    }, 100); 
} 

function replaceTheme() { 
    var oldSkinName = $(doc).data("kendoSkin"), 
     newLink, vmLink; 

    if (doc.createStyleSheet) { 
     // < IE 11 
     newLink = doc.createStyleSheet(url); 
     vmLink = doc.createStyleSheet(vmUrl); 
    } else if ($('html').hasClass('k-ie')) { 
     // IE 11 

     newLink = $("<link/>"); 
     newLink.appendTo("head"); 
     newLink.attr({ type: 'text/css', rel: 'stylesheet' }) 
      .attr('href', url); 

     vmLink = $("<link/>"); 
     vmLink.appendTo("head"); 
     vmLink.attr({ type: 'text/css', rel: 'stylesheet' }) 
      .attr('href', vmUrl); 

    } else { 
     // All the smart browsers. 
     newLink = skinLink.eq(0).clone().attr("href", url); 
     vmLink = skinLink.eq(0).clone().attr("href", vmUrl); 
    } 

    newLink.insertBefore(skinLink[0]); 
    vmLink.insertBefore(skinLink[0]); 

    skinLink.remove(); 

    $(doc.documentElement).removeClass("k-" + oldSkinName).addClass("k-" + skinName); 
} 

if (animate) { 
    preloadStylesheet(url, replaceTheme); 
} else { 
    replaceTheme(); 
} 
}; 
+0

Css url'nin sonuna bir zaman damgası eklemeye çalışın, ör.:. Url + "? _ =" + (Yeni Tarih()). GetTime() '.. belki de bu URL'yi önbelleğe almayı engelleyin. – DontVoteMeDown

+0

Öneriniz, sorunumuzun cevabıydı. Bence cevap olarak göndermelisin. Google/SO’da henüz kesin bir cevap bulamadım. – HK1

+0

Tamam, daha sonra bir cevap yazdım. – DontVoteMeDown

cevap

1

deneyin, ör .:

url = url + "?_=" + (new Date()).getTime(); 

Bu url önbelleğe alma önleyecektir.

İlgili konular