This repository has been archived on 2022-08-19. You can view files and clone it, but cannot push or open issues or pull requests.
hydrogen-web/prototypes/webkit-blob-sandbox-fail/fail.html

52 lines
2.5 KiB
HTML
Raw Permalink Normal View History

2021-03-08 18:47:31 +05:30
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<iframe id="iframe" sandbox="allow-scripts allow-downloads allow-downloads-without-user-activation"></iframe>
<script type="text/javascript">
const iframeHtml = `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<button id="download">Download</button>
<a id="link" href="#">Link to progamatically click</a>
<script type="text/javascript">
var link = document.getElementById("link");
var button = document.getElementById("download");
async function download(blob, filename) {
const slice = blob.slice(0, 1);
const reader = new FileReader();
reader.readAsArrayBuffer(slice);
const buffer = await new Promise((resolve, reject) => {
reader.addEventListener("abort", () => reject(new Error("aborted")));
reader.addEventListener("error", e => reject(e.error));
reader.addEventListener("load", e => resolve(e.target.result));
});
document.body.appendChild(document.createTextNode("buffer: " + new Uint8Array(buffer)[0] + " (" + buffer.byteLength + ")"));
var url = URL.createObjectURL(blob);
link.href = url;
link.download = filename;
link.innerText = url;
link.click();
URL.revokeObjectURL(url);
}
button.addEventListener("click", async function(event) {
try {
await download(new Blob(["a message from the iframe"], {type: "text/plain"}), "hello world.txt");
} catch (err) {
document.body.appendChild(document.createTextNode(err.toString()));
}
});
</${"script"}>
</body>
</html>`;
document.getElementById("iframe").setAttribute("srcdoc", iframeHtml);
</script>
</body>
</html>