Skip to content

Instantly share code, notes, and snippets.

@guest271314
Created December 22, 2019 07:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save guest271314/2275c3e01158e94126d5637d7eb73c0c to your computer and use it in GitHub Desktop.
Save guest271314/2275c3e01158e94126d5637d7eb73c0c to your computer and use it in GitHub Desktop.
ES Module import export at file: protocol
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tetris</title>
<script>
/*
ES Module import export at file: protocol
https://stackoverflow.com/questions/59440066/
chromium-browser --allow-file-access-from-files
https://askubuntu.com/questions/160245/
firefox => about:config => privacy.file_unique_origin : false
https://stackoverflow.com/questions/56999411/
https://plnkr.co/edit/RaCIg9?p=info
*/
const script = document.createElement("script");
script.type = "module";
document.currentScript.insertAdjacentElement("afterend", script);
if (location.protocol === "file:") {
(async _ => {
const EXPORT_URL = "page1.js";
const IMPORT_URL = "main.js";
await new Promise(resolve => {
const exportRequest = new XMLHttpRequest();
exportRequest.open("GET", EXPORT_URL);
exportRequest.responseType = "blob";
exportRequest.onload = _ => {
const reader = new FileReader();
reader.addEventListener("load", async _ => {
let getImport = await new Promise(importPromise => {
const importRequest = new XMLHttpRequest();
importRequest.overrideMimeType("text/javascript")
importRequest.open("GET", IMPORT_URL);
importRequest.onload = _ => importPromise(importRequest.response);
importRequest.send();
});
const importExport = getImport.replace(/"[^"]+"(?=;|;\n)/, `"${reader.result.replace(/xml/, "javascript")}"`);
script.onload = resolve;
reader.addEventListener("load", _ => {
script.src = reader.result;
});
reader.readAsDataURL(new Blob([importExport], {
type: "text/javascript"
}));
}, {
once: true
});
reader.readAsDataURL(exportRequest.response);
}
exportRequest.send();
});
window.onload.call();
})();
} else {
script.src = "main.js";
}
</script>
</head>
<body></body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment