动态载入IMG, JS和CSS等文件
2012-08-20 15:42
435 查看
android的webAPP开发中,如果使用载入远程服务器的html页面来实现的方式,会牵涉到第一次加载出现白屏或者长时间等待的问题;那么在这个时候需要提升用户体验,需要在加载远程html\javascript\css\image等文件的时候,现实Loading界面,这个时候需要将图片、脚本、样式表文件等都要作为动态文件载入,javascript和image载入问题不大,相对比较简单,方式如下:
可以将上面的代码放如前面所说的小JQuery库中,然后实现批量载入:
这里的LoadScripts方法是按照数组依次排序载入的,这样是防止类库载入的时候发生网络延迟而导致下面的类库执行中出错。
与载入javaScript和image都问题不大,但是载入css文件的时候就发生问题了,在android下测试中发现css文件不会发生onload事件,所以无法识别css文件是否载入完成。所以想使用载入script的类似的方式来载入css文件在android上是行不通了。
在后来实现$.ajax功能的时候,突然冒出一个主意,可不可以用ajax来载入css文件,然后操作DOM,将css文件内容插入<style>节点中,方式如下:
经过测试,果然可以,不过css中包含图片地址信息需要设为绝对地址,或者按照当前文件路径来写就可以了,效果如下:
LoadImage : function (url, callback) { var img = new Image(); img.src = url; img.onload = function () { if (callback) callback(); }; }, LoadScript : function (url, callback) { var script = document.createElement("script") script.type = "text/javascript"; script.src = url; document.getElementsByTagName("head")[0].appendChild(script); script.onload = function () { if (callback) callback(); }; },
可以将上面的代码放如前面所说的小JQuery库中,然后实现批量载入:
LoadImages : function (arr, progress, callback){ var completed = 0; for (var i = 0; i < arr.length; i++) { $.LoadImage(arr[i], function() { completed++; progress && progress(completed, arr.length); if(completed >= arr.length) { callback && callback(); } }); } }, LoadScripts : function(arr, progress, callback, no){ var i = no || 0; if(arr.length > 0){ var arg = arguments; $.LoadScript(arr[i], function() { i++; progress && progress(i, arr.length); if(i >= arr.length) { callback && callback(); } else{ arg.callee(arr, progress, callback, i); } }); } },
这里的LoadScripts方法是按照数组依次排序载入的,这样是防止类库载入的时候发生网络延迟而导致下面的类库执行中出错。
与载入javaScript和image都问题不大,但是载入css文件的时候就发生问题了,在android下测试中发现css文件不会发生onload事件,所以无法识别css文件是否载入完成。所以想使用载入script的类似的方式来载入css文件在android上是行不通了。
在后来实现$.ajax功能的时候,突然冒出一个主意,可不可以用ajax来载入css文件,然后操作DOM,将css文件内容插入<style>节点中,方式如下:
LoadCss : function (url, callback) { $.ajax({ url : url, success : function(data){ $.Get('head').insert({ type : 'style', html : data }); callback && callback(); } }); },
经过测试,果然可以,不过css中包含图片地址信息需要设为绝对地址,或者按照当前文件路径来写就可以了,效果如下:
相关文章推荐
- 动态载入/删除/更新外部 JavaScript/Css 文件的代码
- jquery动态加载js,css文件
- 动态加载、移除、替换js/css文件
- js 动态修改css文件的方法
- 页面动态删除js、css文件
- Django调用css、img、js等静态文件
- Django调用css、img、js等静态文件
- 用JavaScript动态加载CSS和JS文件
- JS动态加载JS和CSS文件的方法
- C# 后台动态引用js及css文件
- js动态加载css文件
- 动态(按需)加载js和css文件
- YII 如何在当前页面外部加载css,img,js文件
- APP在加载外部html时选择加载本地的js、css、img等资源文件(上:安卓篇)
- javascript实现动态导入js与css等静态资源文件的方法
- 使用javaScript动态加载Js文件和Css文件
- Asp.Net网页头部动态加载标题、描述、关键字、css和js文件的方法
- 动态加载js和css(外部文件)
- 使用JS动态在页面加载CSS文件
- js动态加载css文件和js文件的方法