“Not allowed to load local resource”
The page loads, but an image is a broken icon, a link does nothing, or an iframe is blank. The console says:
Not allowed to load local resource: file:///C:/Users/you/project/img/chart.png
The URL after the colon is the whole diagnosis. Something in the page points at a file on a disk, and the page itself is not on that disk.
Why Chrome blocks it
A page served over http:// or https:// is a web page, and web pages
don't get to touch the visitor's filesystem. If they could, any site you
visit could embed file:///C:/Users/you/Documents/ and read it. So
Chrome and Edge refuse every file:/// subresource and navigation from
a web origin, with no prompt and no per-site exception.
The same file opened by double-click is fine, because then the page is
file:// too. That is the trap: it works on the machine that made it,
and breaks the moment it is served, previewed or embedded anywhere else.
Where the file:/// came from
| Source of the page | Usual culprit |
|---|---|
| Exported from Word, Excel or an old editor | Absolute C:\… paths written into src and href |
| Generated by a script or notebook | os.path.abspath() / Path.resolve() in the template |
| Coding agent wrote it | It used the absolute path of its working directory |
| Intranet or SharePoint page | Links to file://server/share/… from the IE era |
| Electron/desktop app preview loading a remote page | Mixing file: assets into an http document |
| Test report viewed from a CI artifact server | Screenshots referenced by absolute runner paths |
Open DevTools → Console to see every refused URL, or
Elements and search for file: to find them in the markup.
Fix 1: make paths relative
Copy the files next to the page and point at them relative to it:
<!-- breaks everywhere except your machine -->
<img src="file:///C:/Users/you/project/img/chart.png" />
<!-- works anywhere the folder goes -->
<img src="img/chart.png" />
In generators, compute the path relative to the output file —
os.path.relpath(image, start=out_dir) in Python,
path.relative(outDir, image) in Node — rather than writing an absolute
one. Watch out for backslashes too: img\chart.png is a Windows path,
not a URL, and breaks on every server.
Fix 2: put the files inside the HTML
For a page you're going to send or upload rather than host as a folder, embed the resources so there is nothing left to load:
- One image → a Base64 data URI with the image to Base64 converter.
- A whole page with images, CSS and fonts → the HTML inliner rewrites every reference in one pass and lists the ones it couldn't find.
The result is one self-contained HTML file that renders the same from disk, a server, an email or an iframe.
Fix 3: links to files on a share
A file://fileserver/finance/q3.xlsx link on an intranet page was how
departments shared documents in the Internet Explorer years. In Chrome
and Edge it is a dead link. The options are to serve that share over
HTTP, move the documents into a system with web URLs, or — for HTML
reports specifically — publish them and link to the published page.
Don't fix it with flags
Search results suggest launching Chrome with
--allow-file-access-from-files or --disable-web-security, or
installing an extension that opens local links. Each works on exactly
one configured machine, and the second one switches off the same-origin
policy for every site you visit in that session. Your recipients won't
have done it, so the page is still broken for them.
Related errors
from origin 'null' has been blocked by CORS policy— the page is on disk and is trying tofetcha sibling file: CORS error from origin 'null'.- Broken images only after sending the file — the images were never sent: images not showing.
Mixed Content: … requested an insecure resource—http://on anhttps://page: mixed content.
Try it
Comma is free — publish the HTML with its images, send one link, and let people comment on the exact chart instead of a screenshot of it.