You unzip your export, double-click index.html, and get a blank white page. The console says something like Failed to load module script or Cross origin requests are only supported for protocol schemes: http, https.
Nothing is wrong with the export. You are hitting a browser security rule, and the fix takes about ten seconds.
Why double-clicking fails
Double-clicking opens the file with the file:// protocol. Fetching over http:// and opening over file:// are different security contexts, and browsers deliberately restrict the second one.
Three things break under file://:
JavaScript modules. Any <script type="module"> or .mjs file is blocked outright. Framer exports ship module scripts, so the page never boots. This is the one that produces a completely blank page.
fetch() and XHR. Every file:// request counts as a cross-origin request to a null origin. Search indexes, JSON data files and anything else the page loads at runtime will fail.
Relative path resolution. It mostly works, but the edge cases differ from a real server in ways that will mislead you when you are trying to debug something else.
None of this is specific to no-code exports. Any modern static site has the same problem. It is why the README inside your ZIP leads with a warning not to open index.html directly.
The fix: serve the folder over HTTP
You need any HTTP server pointed at the export folder. All of these do the job — pick whichever is already installed.
macOS and Linux
Node.js — fastest if you have it:
cd /path/to/your-export
npx serve
Press Enter if it offers to install. It prints a URL like http://localhost:3000. Open that.
While you are iterating on files, disable caching so you are not staring at a stale copy:
npx serve -c-1
Python — already on macOS and most Linux distros:
cd /path/to/your-export
python3 -m http.server 8000
Then open http://localhost:8000. Ctrl+C stops it.
Python's http.server sends the correct MIME types, which matters more than it sounds: .mjs has to arrive as text/javascript or the browser refuses to execute it as a module. A server that guesses wrong will reproduce the blank page you were trying to escape.
Caddy — closest to production:
cd /path/to/your-export
caddy file-server --listen :8000
Worth using if you plan to deploy behind a proxy and want local behaviour to match, since it sets sensible MIME types and headers automatically.
Windows
The Node and Python commands are identical in PowerShell or Command Prompt, with a Windows path:
cd C:\Users\you\Downloads\your-export
npx serve
If Python was installed from python.org, the launcher is py:
cd C:\Users\you\Downloads\your-export
py -m http.server 8000
If neither is installed and you would rather not install anything, VS Code's Live Server extension does the same thing from the editor: right-click index.html, choose Open with Live Server.
Which port?
It does not matter, as long as nothing else is using it. If you see EADDRINUSE, pick another: npx serve -l 4000 or python3 -m http.server 4001.
Checking the export actually worked
Once it is served, a quick pass tells you whether the export is sound before you spend time deploying it:
Open DevTools and look at the Console. It should be quiet. Errors mentioning your original platform's domain mean something is still calling home.
Check the Network tab for 404s. Filter by status. A missing asset here is a missing asset in production.
Click through the navigation. Internal links should stay on localhost. If a click sends you back to your Webflow or Framer domain, that link was built at runtime and did not get rewritten — worth reporting.
Resize the window. Layout should change at your breakpoints. If every breakpoint renders at once, the breakpoint CSS did not come through.
Scroll the whole page. Images below the fold should be present, and scroll animations should fire.
Submit a form. Forms need a destination after export. If you configured one during export, confirm it arrives; if you did not, the form will not do anything yet.
After it works locally
A folder that serves correctly on localhost will serve correctly almost anywhere, because there is nothing left to configure. The usual next steps:
- Drag the folder onto Netlify Drop — no account needed to test
- Push to GitHub and point Vercel, Cloudflare Pages or GitHub Pages at the repo
- Upload over FTP to shared hosting — see deploying an exported site over FTP
For a full comparison of the free options, read how to host a static HTML website for free.
Common problems
Still blank, and the console mentions modules. The server is sending .mjs as the wrong MIME type. Switch to python3 -m http.server or Caddy, both of which get it right.
Styles load but fonts do not. On the free plan assets are hotlinked to the original CDN rather than downloaded, so fonts need a network connection. Fully offline hosting needs the download option.
Page works, interactions do not. Sliders, tabs and accordions are re-implemented in plain JavaScript during export. If one is dead, check the console — a JS error earlier on the page will stop the rest of the script.
A 403 on every file. Directory permissions. chmod -R a+r . in the export folder fixes it on macOS and Linux.
Frequently Asked Questions
Technical Background
Understanding the underlying architecture is key to long-term scalability. NoCodeExport prioritizes clean, modular code generation that adheres to modern web standards.
Architecture
Built on top of established frameworks ensure portability and performance across any hosting provider.
Security
Static generation significantly reduces the attack surface, providing enterprise-grade security for every project.



