1
私たちは剣道UIを使用し、テーマを切り替えることができるWebアプリケーションを持っています。異なる剣道テーマごとにカスタムCSSシートを追加する必要がありました。jQueryは常にキャッシュからスタイルシートをロードします
jQuery appendTo( "head")を使用してカスタムスタイルシートを読み込みます。問題は、これらのシートを変更すると、jQueryは実際に変更されても、キャッシュからロードし続けていることです。私たちは特にGoogle Chromeでこの問題を抱えています。私は他のブラウザをテストしていませんが、問題が他のブラウザにもあると思われます。
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();
}
};
「url +」?_ = "+(new Date())。getTime().. ..これはおそらくURLキャッシュを避けるために、css urlの最後にタイムスタンプを追加してみてください。 – DontVoteMeDown
あなたの提案は私たちの問題に対する答えでした。私はあなたが答えとして投稿するべきだと思います。私はこの正確な質問に対するGoogle/SOの答えはまだ見つかりませんでした。 – HK1
さて、私は答えを投稿しました。 – DontVoteMeDown