Source code

Revision control

Copy as Markdown

Other Tools

<!DOCTYPE html>
<meta charset="utf-8">
<title>Worker Blob Fetcher</title>
<script>
window.addEventListener("message", function (evt) {
const { url } = evt.data;
const workerScriptContent = `
async function doFetch(url) {
const response = await fetch(url);
const body = await response.text();
return {
status: response.status,
body,
};
}
async function fetchAndPost(url) {
try {
const message = await doFetch(url);
self.postMessage(message);
} catch(e) {
self.postMessage({ error: e.name });
}
}
fetchAndPost("${url}");
`;
const blob =
new Blob([workerScriptContent], {type: 'application/javascript'});
const workerScriptUrl = URL.createObjectURL(blob);
const worker = new Worker(workerScriptUrl);
URL.revokeObjectURL(workerScriptUrl);
worker.addEventListener("message", (evt) => {
parent.postMessage(evt.data, "*");
});
worker.addEventListener("error", (evt) => {
parent.postMessage({ error: evt.message || "unknown error" }, "*");
});
});
</script>