| <!doctype html> |
| <script> |
| const baseLocation = window.location; |
| const parentWorkerScript = ` |
| const workerUrl = |
| new URL('postmessage-fetched-text.js', '${baseLocation}').href; |
| const childWorker = new Worker(workerUrl); |
| |
| // When a message comes from the parent frame, sends a resource url to the |
| // child worker. |
| self.onmessage = (e) => { |
| childWorker.postMessage(e.data); |
| }; |
| // When a message comes from the child worker, sends a content of fetch() to |
| // the parent frame. |
| childWorker.onmessage = (e) => { |
| self.postMessage(e.data); |
| }; |
| `; |
| const blob = new Blob([parentWorkerScript], { type: 'text/javascript' }); |
| const blobUrl = URL.createObjectURL(blob); |
| const worker = new Worker(blobUrl); |
| |
| function fetch_in_worker(url) { |
| const resourceUrl = new URL(url, baseLocation).href; |
| return new Promise((resolve) => { |
| worker.onmessage = (event) => { |
| resolve(event.data); |
| }; |
| worker.postMessage(resourceUrl); |
| }); |
| } |
| </script> |