<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>web work</title>
</head>
<body>
<div>
<input type="file" id="ipt">
</div>
<div class="box">
<img src="" alt="">
</div>
</body>
<script>
// 主线程采用new命令,调用Worker()构造函数,新建一个 Worker 线程。
const work = new Worker('./work.js');
// 主线程调用worker.postMessage()方法,向 Worker 发消息。
work.postMessage({
data: 'hello word'
});
// 主线程通过worker.onmessage指定监听函数,接收子线程发回来的消息。
work.onmessage = ({ data }) => {
console.log(data);
}
// Worker 完成任务以后,主线程就可以把它关掉。
// work.terminate();
// 主线程可以监听 Worker 是否发生错误
work.addEventListener('error', () => {
console.log('web work 发生错误');
});
// 使用完毕,为了节省系统资源,必须关闭 Worker。
const ipt = document.querySelector('#ipt');
ipt.addEventListener('change', function () {
const file = ipt.files[0];
// FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。
// const reader = new FileReader();
// reader.readAsArrayBuffer(file);
// // reader.readAsText(file);
// // 开始读取指定的 Blob中的内容, 一旦完成, result 属性中保存的将是被读取文件的 ArrayBuffer 数据对象.
// reader.onload = function (e) {
// console.log('读取的文件ArrayBuffer', e, e.target.result);
// const result = e.target.result;
// const list = new Uint8Array(result);
// // Array.from(list).forEach(el => {
// // const item = new TextDecoder('gb2312').decode(el);
// // console.log(item);
// // });
// const data = new TextDecoder('UTF-8').decode(list);
// console.log(data);
// // document.querySelector('.box').innerHTML = data;
// };
// const reader2 = new FileReader();
// reader2.readAsText(file, 'utf-8');
// reader2.onload = function (e) {
// const data = e.target.result;
// console.log('-------------------');
// console.log(data);
// document.querySelector('.box').innerHTML = data;
// };
const reader3 = new FileReader();
reader3.readAsDataURL(file);
reader3.onload = function (e) {
const data = e.target.result;
document.querySelector('.box img').src = data;
};
});
</script>
</html>
self.addEventListener('message', ({ data }) => {
console.log('主线程发过来的消息:', data);
self.postMessage('你好啊');
}, false);