执行上述代码就会出现崩溃问题; 模拟器也可以复现这个问题

- 发布:2022-09-14 15:45
- 更新:2024-01-14 12:39
- 阅读:349
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: window11
HBuilderX类型: 正式
HBuilderX版本号: 3.5.3
手机系统: iOS
手机系统版本号: iOS 14
手机厂商: 苹果
手机机型: iPhone12
页面类型: vue
vue版本: vue2
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
正常清除缓存
正常清除缓存
实际结果:
app崩溃;
app崩溃;
bug描述:
ios下使用native.js清除本地浏览器缓存,在iOS 14.5 、14.5.1、16.0版本上出现应用崩溃情况。其他系统正常。
var websiteDataTypes = plus.ios.invoke('WKWebsiteDataStore', 'allWebsiteDataTypes');
var dateFrom = plus.ios.invoke('NSDate', 'dateWithTimeIntervalSince1970:', 0);
var dateStore = plus.ios.invoke('WKWebsiteDataStore', 'defaultDataStore');
plus.ios.invoke(dateStore, 'removeDataOfTypes:modifiedSince:completionHandler:', websiteDataTypes, dateFrom, function() {});
已经可以确认的是这部分代码导致的崩溃。
同时有配置mainfest.json
"kernel" : {
"ios" : "WKWebview",
"recovery" : "reload"
}
请官方大大帮忙看下

FullStack - 【插件开发】【专治疑难杂症】【ios上架、马甲包、白包、过审、已成功上架过几百个】【多款插件已上架:https://ext.dcloud.net.cn/publisher?id=22130】【非诚勿扰】QQ:543610866
加个 try 看看

HellyW_SVIP (作者)
// 清除webview缓存
try {
// IOS 设备缓存清除
if (uni.getSystemInfoSync().platform == "ios") {
var websiteDataTypes = plus.ios.invoke('WKWebsiteDataStore', 'allWebsiteDataTypes');
var dateFrom = plus.ios.invoke('NSDate', 'dateWithTimeIntervalSince1970:', 0);
var dateStore = plus.ios.invoke('WKWebsiteDataStore', 'defaultDataStore');
plus.ios.invoke(dateStore, 'removeDataOfTypes:modifiedSince:completionHandler:', websiteDataTypes,
dateFrom,
function() {});
}else{
// 安卓设备缓存清除
plus.navigator.removeAllCookie()
plus.navigator.removeSessionCookie()
plus.cache.clear()
}
} catch (e) {
console.error(e)
}

清除 WKWebsiteDataTypeDiskCache 类型缓存会导致奔溃
以下是使用UTS插件的写法
// index.uts
// 引用ios api
import WKWebsiteDataStore from "WebKit.WKWebsiteDataStore";
export function clearWebStorage(): void {
let allWebsiteDataTypes = WKWebsiteDataStore.allWebsiteDataTypes()
// 移除 WKWebsiteDataTypeDiskCache,导致奔溃
allWebsiteDataTypes.remove('WKWebsiteDataTypeDiskCache')
let ds = WKWebsiteDataStore.default()
ds.fetchDataRecords(ofTypes=allWebsiteDataTypes, completionHandler=records => {
ds.removeData(ofTypes=allWebsiteDataTypes, for=records, completionHandler=() => {
console.log("clear cache");
})
})
}
HellyW_SVIP (作者)
试了 不可以
这是个必现问题,主要onload或者onshow内执行这个方法,再次跳转进入该页面就会崩溃。可以通过模拟器iOS14.5模拟
2022-09-16 15:10
FullStack
回复 w***@outlook.com: 用原生插件实现吧
2022-09-16 15:14
FullStack
回复 FullStack: 试试这个的clear:https://www.html5plus.org/doc/zh_cn/webview.html#plus.webview.WebviewObject.clear
plus.cache.clear可以清除整个应用中的缓存数据
2022-09-16 15:22
FullStack
真机ios16,没有发现闪退
2022-09-16 15:30
HellyW_SVIP (作者)
回复 FullStack: plus.cache.clear不可以的。 我们之前试过了,plus.cache.clear只对安卓生效,对iOS的UIwebview也生效, 对WKwebview不生效。所以才用的这个方法。
我在二楼贴一下我现在用的代码
2022-09-16 16:08
HellyW_SVIP (作者)
回复 FullStack: iOS16的问题是TF同步过来的, iOS14.5和14.5.1 是我们在模拟器和真机都复现了的
2022-09-16 16:12