[英]How to load a CSS dynamically in cordova
我正试图在xhr请求中动态加载CSS。
加载CSS不是问题,我可以通过xhr加载它并通过HTML5 File API将其存储到文件系统。 然后我可以得到一个完美的URL。
但是如果我通过javascript在标题中创建一个新的链接元素,如下所示:
<link rel="stylesheet" type="text/css" id="skin" href="cdvfile://localhost/temporary/mydomin.tdl/skin.css">
你的样式表没有任何效果,我怎么能强迫cordova拿出样式表呢?
$('head').append('<link rel="stylesheet" href="style2.css" type="text/css" />');
*更新:我有一个有效的解决方案,我会将其添加到下面的答案*
我发现这个问题并且遗憾的是建议的答案没有解决它。
通过XHR请求从外部PHP脚本加载CSS数据(因为我的CSS数据对每个页面都是动态的)我使用:
var storeCSSURL = "https://www.example.com/dynamicCSS.php?storeID=x";
$('head').append('<link rel="stylesheet" href="' + storeCSSURL + '" type="text/css" />');
我还尝试用新的URL替换现有的样式表链接; 并添加日期时间戳以防止缓存,这也无法正常工作。
在Web浏览器中工作得很好,我知道数据是通过XHR请求加载的,并且也应用于头部CSS标签,尽管它在Cordova / Phone Gap中不起作用...应用程序只是不用CSS更改了PHP脚本。
*新更新*
我终于提出了一个有效的解决方案,它有点像黑客,因为它没有直接解决问题; 但要解决它并且对我的需求很有帮助。
在PhoneGap / Cordova中,我使用了一个pageInit.js类型的场景,它从PHP脚本中动态加载网页,我想大多数人都会以类似的方式使用它。
页面加载后我添加了:
$("body").append('<style id="dynamicStyles"></style>');
然后只需对Dynamic CSS(PHP)文件执行$ .POST请求,该文件返回所有动态样式数据; 然后我加载到样式标签中。
这看起来像这样:
$.post("https://www.example.com/controller.php", { url: url }, function (data, status) {
if (status == "success") {
$("body").html(data);
// Loads the main page content into the body tag
$("body").append('<style id="dynamicStyles"></style>');
// Appends the main page content with a style tag
$.post("https://www.example.com/dynamicCSS.php", { storeID: storeID }, function (data, status) {
if (status == "success") {
$("#dynamicStyles").html(data);
// Loads CSS data from external PHP script dynamically
// then places it into the new style tag.
}
});
}
});
CSS更新此行:
$("#dynamicStyles").html(data);
这会将所有新的动态样式数据加载到样式标记中; 所以结果是一个页面样式定义,您可以在外部PHP与CSS数据的任何阶段使用.html()替换样式。
Phone Gap / Cordava识别样式标签更改并相应更新视觉效果:-)
我相信你可以设置你的项目以这种方式加载所有CSS数据而不是正常的头部CSS链接; 你永远不会有Phone Gap / Cordova那令人讨厌的CSS缓存问题。
我希望这对某人有用!
$(document).ready(function () {
$("a").click(function () {
$('head').append('<link rel="stylesheet" href="style2.css" type="text/css" />');
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.