|
|
|
@ -8,6 +8,12 @@ import { IMessage, IPreviewState } from "../shared";
|
|
|
|
|
import "./style.scss";
|
|
|
|
|
|
|
|
|
|
window.addEventListener("message", (event) => {
|
|
|
|
|
const isInSandbox = window.origin === "null";
|
|
|
|
|
if (!isInSandbox) {
|
|
|
|
|
// To prevent someone from using this html file to run arbitrary code in non-sandboxed context
|
|
|
|
|
console.error("not in sandbox");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const e = event.data as IMessage | { kind: undefined };
|
|
|
|
|
if (e.kind === "initialize") {
|
|
|
|
|
initialize(e.state);
|
|
|
|
@ -43,7 +49,9 @@ async function initialize(state: IPreviewState) {
|
|
|
|
|
eval(state.js);
|
|
|
|
|
} catch (err) {
|
|
|
|
|
const pre = document.createElement("pre");
|
|
|
|
|
pre.appendChild(document.createTextNode(`${err}`));
|
|
|
|
|
pre.appendChild(
|
|
|
|
|
document.createTextNode(`${err}: ${(err as any).state}`)
|
|
|
|
|
);
|
|
|
|
|
document.body.insertBefore(pre, document.body.firstChild);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|