h5+app缓存清理插件。

用h5开发app的程序员朋友一定会遇到app用久了缓存堆积的问题。我这边话不多说直接上代码,代码注释清晰,如有不恰当的地方,欢迎提出讨论。


/*!
 * 黄国烨(448249687@qq.com)
 *  Date: 2017-10-15
 * 清除缓存组件
 */
(function($) {
var _CacheClean = {
/**
* 获取缓存入口,总入口
*/
init: function() {
plus.nativeUI.showWaiting("正在计算缓存...");
plus.cache.calculate(function(size) {
//通过URL参数获取目录对象或文件对象
plus.io.resolveLocalFileSystemURL('_doc', function(entry) {
//alert("是否是文件夹对象="+entry.isDirectory);
var dirReader = entry.createReader();
dirReader.readEntries(function(entries) {
// alert('_doc文件个数='+entries.length);
console.log('+文件前size=' + size);
_CacheClean.getDirFileSize(entries, entries.length, 0, 0, size);
// size += getDirFileSize(entries,entries.length,0,0,size);
// console.log('+文件后size='+size);
// for (var k = 0 ; k < entries.length ; k++) {
// var entriyTemp = entries[k];
// if(entriyTemp.isFile){
// //获取文件的属性
// entry.getMetadata( function ( metadata ) {
// console.log("metadata: " + k + '=' + JSON.stringify(metadata));
// var sizeNum = metadata.size ;
// size = size + sizeNum ;
// }, function () {
// alert( e.message );
// } );
// }
//
// }
// console.log('调用viewCache()==='+size);
// viewCache(size);
}, function(e) {
alert("Read directory  dirReader.readEntries failed: " + e.message);
});
}, function(e) {
mui.alert('plus.io.resolveLocalFileSystemURL-error=' + e.message);
});
});
},
/**
* 递归获取某个文件夹的各个文件大小的总和 byte 
* @param {Object} entries 某个文件夹的文件总和数组对象
* @param {Object} len     文件夹的文件个数
* @param {Object} k       当前是第i个文件
* @param {Object} size    后面返回的文件大小
* @param {Object} sizeYuan    后面返回的文件大小
*/
getDirFileSize: function(entries, len, k, size, sizeYuan) {
len = Number(len);
k = Number(k);
size = Number(size);
sizeYuan = Number(sizeYuan);
var entriyTemp = entries[k];
if(entriyTemp.isFile) {
//获取文件的属性
entriyTemp.getMetadata(function(metadata) {
var sizeNum = metadata.size;
size = size + sizeNum;
console.log(size + "====metadata: " + k + '=' + JSON.stringify(metadata));
if(len <= k + 1) {
console.log('getDirFileSize===' + size);
_CacheClean.viewCache(size + sizeYuan);
return;
} else {
k += 1;
_CacheClean.getDirFileSize(entries, len, k, size, sizeYuan);
}
}, function() {
alert(e.message);
});
} else {
if(len <= k + 1) {
console.log('getDirFileSize-else===' + size);
this.viewCache(size + sizeYuan);
return;
} else {
k += 1;
arguments.callee(entries, len, k, size, sizeYuan);
}
}
},
/**
* 页面上展示缓存的大小 
* @param {Object} size 缓存大小(byte)
*/
viewCache: function(size) {
var kbCache = Number(size) / 1024;
if(kbCache < 0.01) {
mui.toast('系统暂无缓存');
plus.nativeUI.closeWaiting();
return;
}
var mbCache = Number(kbCache) / 1024;
if(kbCache < 20) {
kbCache = kbCache + '';
this.clearCacheAction(kbCache.substring(0, kbCache.indexOf('.') + 6), 'KB');
return;
}
if(mbCache < 2) {
kbCache = kbCache + '';
this.clearCacheAction(kbCache.substring(0, kbCache.indexOf('.') + 2), 'KB');
return;
}
mbCache = mbCache + '';
this.clearCacheAction(mbCache.substring(0, mbCache.indexOf('.') + 2), 'MB');
},
/**
* 清缓存动作
* @param {Object} size 缓存大小 
* @param {Object} danwei 单位
*/
clearCacheAction: function(size, danwei) {
if(plus.nativeUI) {
plus.nativeUI.closeWaiting();
}
mui.confirm('app现有系统缓存' + size + danwei + ',是否立即进行清除?', '提示', btnArray, function(e) {
if(e.index == 0) {
plus.nativeUI.showWaiting("正在清理缓存...");
//mui.toast('111')
plus.storage.clear();
plus.cache.clear(function(e) {
console.log('删除缓存成功==,调用clearDirCache' + JSON.stringify(e));
_CacheClean.clearDirCache();
});


}
});
},
/**
* 清理_doc目录下的文件 
*/
clearDirCache: function() {
plus.io.resolveLocalFileSystemURL('_doc', function(entry) {
//alert("是否是文件夹对象="+entry.isDirectory);
var dirReader = entry.createReader();
dirReader.readEntries(function(entries) {
_CacheClean.clearDirCacheAction(entries, entries.length, 0);
}, function(e) {
alert("Read directory  dirReader.readEntries failed: " + e.message);
});
},
function(e) {
mui.alert('plus.io.resolveLocalFileSystemURL-error=' + e.message);
});
},
/**
* 清除_doc缓存
* @param {Object} entries doc文件
* @param {Object} len doc文件个数
* @param {Object} k 当前第几个0开始
*/
clearDirCacheAction: function(entries, len, k) {
len = Number(len);
k = Number(k);
var entriyTemp = entries[k];
if(entriyTemp.isFile) {
entriyTemp.remove(function(entry) {
plus.console.log("Remove succeeded");
if(k + 1 >= len) {
_CacheClean.restarApp();
} else {
k += 1;
_CacheClean.clearDirCacheAction(entries, len, k)
}
}, function(e) {
alert(e.message);
if(k + 1 >= len) {
restarApp();
} else {
k += 1;
arguments.callee(entries, len, k)
}
});
} else {
if(k + 1 >= len) {
this.restarApp();
} else {
k += 1;
arguments.callee(entries, len, k)
}
}
},
/**
* 重启该应用 
*/
restarApp : function(){
if(plus.nativeUI){
plus.nativeUI.closeWaiting();
}
    mui.alert('清除缓存成功,请点击“确定”重启应用',function(){
    plus.nativeUI.showWaiting("正在关闭...");
    window.setTimeout(function(){
    plus.runtime.restart();
    },1000);
    });
}
};
_App.cacleClean = _CacheClean;
console.log('HGY-clen-cache init finished!');
}(mui))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
H5+App 中调用手机悬浮窗权限,你需要使用 H5+ 的原生 API 来完成。H5+ 是一套基于 HTML5 的移动应用开发框架,它提供了一些与原生功能交互的接口,包括调用手机悬浮窗权限。 首先,你需要确保你的 H5+App 已经集成了 H5+ 的开发环境和相应的 SDK。然后,你可以按照以下步骤来调用手机悬浮窗权限: 1. 在你的 H5+App 的配置文件(manifest.json)中添加悬浮窗权限的声明。示例代码如下: ```json { "permissions": { "floaty": { "description": "使用悬浮窗权限" } } } ``` 2. 在你的 H5+App 的 HTML 页面中添加 JavaScript 代码来请求悬浮窗权限。示例代码如下: ```javascript document.addEventListener("plusready", function() { // 请求悬浮窗权限 plus.navigator.requestFloatPermission(function(result) { if (result) { console.log("悬浮窗权限已授权"); // 在这里可以进行悬浮窗相关的操作 } else { console.log("悬浮窗权限被拒绝"); // 在这里处理悬浮窗权限被拒绝的情况 } }); }); ``` 在上述代码中,我们使用了 `plus.navigator.requestFloatPermission` 方法来请求悬浮窗权限。该方法会弹出一个系统对话框,询问用户是否授权悬浮窗权限。当用户做出选择后,回调函数中的 `result` 参数将返回授权状态。 3. 根据悬浮窗权限的授权状态,你可以在回调函数中编写相应的逻辑来处理授权成功或被拒绝的情况。 需要注意的是,具体的 API 调用方式可能会因平台和 H5+ 版本的不同而有所差异。你可以参考 H5+ 的官方文档和示例代码来了解更多关于悬浮窗权限的详细信息和使用方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值