74 lines
1.8 KiB
JavaScript
74 lines
1.8 KiB
JavaScript
|
|
// 消息类型
|
||
|
|
const messageType = {
|
||
|
|
config: 0, // 检查是否支持worker写文件
|
||
|
|
writeFile: 1, // 写文件
|
||
|
|
}
|
||
|
|
|
||
|
|
const fs = worker.getFileSystemManager ? worker.getFileSystemManager() : null;
|
||
|
|
const createSharedArrayBuffer = worker.createSharedArrayBuffer;
|
||
|
|
|
||
|
|
function compareVersion(_v1, _v2) {
|
||
|
|
return (
|
||
|
|
_v1
|
||
|
|
.split('.')
|
||
|
|
.map((v) => v.padStart(2, '0'))
|
||
|
|
.join('') >=
|
||
|
|
_v2
|
||
|
|
.split('.')
|
||
|
|
.map((v) => v.padStart(2, '0'))
|
||
|
|
.join('')
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
worker.onMessage((res) => {
|
||
|
|
const {type, payload} = res;
|
||
|
|
if (type === messageType.writeFile) {
|
||
|
|
const {filePath, data, isSharedBuffer} = payload
|
||
|
|
let content = data
|
||
|
|
if (isSharedBuffer) {
|
||
|
|
content = data.buffer
|
||
|
|
}
|
||
|
|
fs.writeFile({
|
||
|
|
filePath,
|
||
|
|
data: content,
|
||
|
|
success: () => {
|
||
|
|
worker.postMessage({
|
||
|
|
type: messageType.writeFile,
|
||
|
|
payload: {
|
||
|
|
isok: true,
|
||
|
|
filePath,
|
||
|
|
}
|
||
|
|
})
|
||
|
|
},
|
||
|
|
fail: err => {
|
||
|
|
worker.postMessage({
|
||
|
|
type: messageType.writeFile,
|
||
|
|
payload: {
|
||
|
|
isok: false,
|
||
|
|
filePath,
|
||
|
|
err
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
if (type === messageType.config) {
|
||
|
|
const {systemInfo} = payload
|
||
|
|
const {platform, version} = systemInfo
|
||
|
|
|
||
|
|
// 安卓才需要使用worker写文件
|
||
|
|
const isAndroid = platform.toLocaleLowerCase() === 'android'
|
||
|
|
// 8.0.18以下版本出现写文件报错
|
||
|
|
const isClientValid = compareVersion(version, '8.0.18')
|
||
|
|
|
||
|
|
worker.postMessage({
|
||
|
|
type: messageType.config,
|
||
|
|
payload: {
|
||
|
|
supportWorkerFs: isAndroid && !!fs && isClientValid,
|
||
|
|
supportSharedBuffer: isAndroid && !!createSharedArrayBuffer,
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|