如何解决postMessage数据有时会丢失
我正在尝试为我的PWA设置网络共享目标,我可以在其中将其他应用程序的文件共享到我的PWA,它对小文件可以正常工作,但是当文件大小超过1 MB时,来自服务人员的数据,其中截取到应用程序的POST请求,并在event.data
中返回null,我不确定是什么原因造成的,并且我不知道这仅仅是时间问题还是我需要改变我做事的方式。这是所有相关代码:
sw.js
self.addEventListener('fetch',function (event) {
if (event.request.method === 'POST' && event.request.url.includes('/me/upload/')) {
event.respondWith((async () => {
const formData = await event.request.formData();
const file = formData.get('file');
function recieveReadyMessage(event) {
if (event.data.action === 'receive-share-file') {
event.source.postMessage({file,action: 'load-image'});
self.removeEventListener('message',recieveReadyMessage);
}
}
self.addEventListener('message',recieveReadyMessage);
return Response.redirect('/me/upload/',303);
})());
} //...
});
index.html
function recieveMessage(event) {
if(event.data === null || event.data.file === null) {
help("It appears something went wrong when receiving the file,this normally happens with large files,if this issue continues,please contact Alek.");
return;
}
if(event.data.action === 'load-image') {
let fileSelector = document.getElementById('uploadlbl');
files[0] = event.data.file;
if (files) {
fileSelector.innerText = files[0].name;
} else {
fileSelector.innerText = 'Your file here';
}
}
}
navigator.serviceWorker.addEventListener('message',recieveMessage,false);
navigator.serviceWorker.ready.then(registration => {
registration.active.postMessage({action: 'receive-share-file'});
});
manifest.json共享目标
"share_target": {
"action": "/me/upload/","method":"POST","enctype": "multipart/form-data","params": {
"files": [
{
"name":"file","accept": ["*/*",".*"]
}
]
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。