|
218 | 218 |
|
219 | 219 | function stopSketch() { |
220 | 220 | const area = document.getElementById('preview-area'); |
| 221 | + // Remove iframe if present |
221 | 222 | const iframe = area.querySelector('iframe'); |
222 | 223 | if (iframe) { try{URL.revokeObjectURL(iframe.src);}catch(e){} iframe.remove(); } |
| 224 | + // Remove direct canvas if present |
| 225 | + const canvas = area.querySelector('canvas'); |
| 226 | + if (canvas) canvas.remove(); |
| 227 | + // Cancel module if running |
| 228 | + if (window.Module) { |
| 229 | + try { if(window.Module._emscripten_cancel_main_loop) window.Module._emscripten_cancel_main_loop(); } catch(e){} |
| 230 | + window.Module = undefined; |
| 231 | + } |
223 | 232 | const ph = document.getElementById('preview-placeholder'); |
224 | 233 | if (ph) ph.style.display = ''; |
225 | 234 | setStatus(''); |
|
228 | 237 |
|
229 | 238 | // Build self-contained iframe HTML for a compiled sketch |
230 | 239 | function makeSketchHTML(jsUrl, wasmB64, dataB64) { |
231 | | - return '<!DOCTYPE html><html><head><style>*{margin:0;padding:0;overflow:hidden}body{background:#000}canvas{display:block;width:100vw;height:100vh}<\/style><\/head><body><canvas id="canvas"><\/canvas><script>(function(){var w=atob("'+wasmB64+'"),wa=new Uint8Array(w.length);for(var i=0;i<w.length;i++)wa[i]=w.charCodeAt(i);var d=atob("'+dataB64+'"),da=new Uint8Array(d.length);for(var i=0;i<d.length;i++)da[i]=d.charCodeAt(i);window.Module={canvas:document.getElementById("canvas"),wasmBinary:wa,getPreloadedPackage:function(){return da.buffer;},onRuntimeInitialized:function(){parent.postMessage("running","*");},print:console.log,printErr:console.warn};})();<\/script><script src="'+jsUrl+'"><\/script><\/body><\/html>'; |
| 240 | + return '<!DOCTYPE html><html><head><style>*{margin:0;padding:0;overflow:hidden}body{background:#000;display:flex;align-items:center;justify-content:center;height:100vh}canvas{display:block}<\/style><\/head><body><canvas id="canvas"><\/canvas><script>(function(){var w=atob("'+wasmB64+'"),wa=new Uint8Array(w.length);for(var i=0;i<w.length;i++)wa[i]=w.charCodeAt(i);var d=atob("'+dataB64+'"),da=new Uint8Array(d.length);for(var i=0;i<d.length;i++)da[i]=d.charCodeAt(i);window.Module={canvas:document.getElementById("canvas"),wasmBinary:wa,getPreloadedPackage:function(){return da.buffer;},onRuntimeInitialized:function(){parent.postMessage("running","*");},print:console.log,printErr:console.warn};})();<\/script><script src="'+jsUrl+'"><\/script><\/body><\/html>'; |
232 | 241 | } |
233 | 242 |
|
234 | 243 | function makeDefaultHTML() { |
235 | 244 | const base = location.origin + '/editor/'; |
236 | | - return '<!DOCTYPE html><html><head><style>*{margin:0;padding:0;overflow:hidden}body{background:#000}canvas{display:block;width:100vw;height:100vh}<\/style><\/head><body><canvas id="canvas"><\/canvas><script>window.Module={canvas:document.getElementById("canvas"),onRuntimeInitialized:function(){parent.postMessage("running","*");},print:console.log,printErr:console.warn};<\/script><script src="'+base+'default_sketch.js"><\/script><\/body><\/html>'; |
| 245 | + return '<!DOCTYPE html><html><head><style>*{margin:0;padding:0;overflow:hidden}body{background:#000;display:flex;align-items:center;justify-content:center;height:100vh}canvas{display:block}<\/style><\/head><body><canvas id="canvas"><\/canvas><script>window.Module={canvas:document.getElementById("canvas"),onRuntimeInitialized:function(){parent.postMessage("running","*");},print:console.log,printErr:console.warn};<\/script><script src="'+base+'default_sketch.js"><\/script><\/body><\/html>'; |
237 | 246 | } |
238 | 247 |
|
239 | 248 | function launchIframe(html) { |
|
253 | 262 | }); |
254 | 263 |
|
255 | 264 | window.addEventListener('load', () => { |
256 | | - launchIframe(makeDefaultHTML()); |
257 | | - setStatus('Running', 'ok'); |
| 265 | + // Load default sketch directly in the preview area (no iframe needed) |
| 266 | + // This avoids blob URL cross-origin issues with external scripts |
| 267 | + const area = document.getElementById('preview-area'); |
| 268 | + const ph = document.getElementById('preview-placeholder'); |
| 269 | + if (ph) ph.style.display = 'none'; |
| 270 | + const canvas = document.createElement('canvas'); |
| 271 | + canvas.id = 'canvas'; |
| 272 | + canvas.style.display = 'block'; |
| 273 | + canvas.style.margin = 'auto'; |
| 274 | + area.appendChild(canvas); |
| 275 | + window.Module = { |
| 276 | + canvas: canvas, |
| 277 | + onRuntimeInitialized: function() { setStatus('Running', 'ok'); }, |
| 278 | + print: console.log, |
| 279 | + printErr: console.warn, |
| 280 | + }; |
| 281 | + const script = document.createElement('script'); |
| 282 | + script.src = 'default_sketch.js'; |
| 283 | + document.head.appendChild(script); |
258 | 284 | }); |
259 | 285 |
|
260 | 286 | async function runSketch() { |
|
0 commit comments