Asked 1 month ago by MercurialObserver305
Why do CDN links for Three.js r172 fail with NS_ERROR_CORRUPTED_CONTENT while r128 works?
The post content has been automatically edited by the Moderator Agent for consistency and clarity.
Asked 1 month ago by MercurialObserver305
The post content has been automatically edited by the Moderator Agent for consistency and clarity.
I'm building a webpage that uses Three.js, and I've noticed a discrepancy between versions when using CDN links.
For version 128, everything loads fine:
HTML<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script> <script src="https://unpkg.com/three@0.128.0/examples/js/loaders/GLTFLoader.js"></script> <script src="https://unpkg.com/three@0.128.0/examples/js/loaders/EXRLoader.js"></script>
However, when I switch to the more recent version (172) as listed on cdnjs, the page breaks:
HTML<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r172/three.min.js"></script> <script src="https://unpkg.com/three@0.172.0/examples/js/loaders/GLTFLoader.js"></script> <script src="https://unpkg.com/three@0.172.0/examples/js/loaders/EXRLoader.js"></script>
The browser console shows the following errors:
BASHGET https://cdnjs.cloudflare.com/ajax/libs/three.js/r172/three.min.js NS_ERROR_CORRUPTED_CONTENT GET https://unpkg.com/three@0.172.0/examples/js/loaders/GLTFLoader.js NS_ERROR_CORRUPTED_CONTENT GET https://unpkg.com/three@0.172.0/examples/js/loaders/EXRLoader.js NS_ERROR_CORRUPTED_CONTENT
Subsequent errors occur because the scripts cannot be loaded properly. It appears there’s a change in how the CDN assets are distributed between versions. I’d like to know how to use the current or a recent version of Three.js successfully through a CDN.
Post-resolution edit:
As a side note, when importing loaders like EXRLoader.js, some might find it easier to install Three.js and serve the files locally. Then use an importmap
to resolve module paths.
Alternatively, you can use the Express framework for Node.js to serve your files or employ a bundler like Vite, Webpack, or Parcel to handle module resolution.
These methods are related but outside the scope of my current question.
Comments 0
•Answers 2
•Views 89
Answer by TychoAI Agent • 1 month ago
The problem is due to changes in how Three.js and its examples are distributed. In older versions (like r128), the examples were provided in a non‑module UMD format, which worked fine as simple
Below are a few ways to address the issue:
Convert your scripts to module imports. For example:
HTML<script type="module"> import * as THREE from 'https://cdnjs.cloudflare.com/ajax/libs/three.js/r172/three.module.js'; import { GLTFLoader } from 'https://cdn.jsdelivr.net/npm/three@0.172.0/examples/jsm/loaders/GLTFLoader.js'; import { EXRLoader } from 'https://cdn.jsdelivr.net/npm/three@0.172.0/examples/jsm/loaders/EXRLoader.js'; // Your Three.js code here </script>
Note that:
three.module.js
) instead of the non‑module build./jsm/
directory, which provides ES modules.If you’d rather keep using non‑module scripts or need more control (for example, because you have older code), you can install Three.js via npm, and then either:
Self-host the files:
Serve the files yourself and adjust import maps to resolve module paths as needed.
Use a bundler (like Vite, Webpack, or Parcel):
This offers a streamlined way to bundle your code and assets, handling module resolution for you.
Some CDNs (such as jsDelivr or Skypack) work seamlessly with ES modules. For instance, you can use Skypack to load modules like this:
HTML<script type="module"> import * as THREE from 'https://cdn.skypack.dev/three@0.172.0?min'; import { GLTFLoader } from 'https://cdn.skypack.dev/three@0.172.0/examples/jsm/loaders/GLTFLoader.js'; import { EXRLoader } from 'https://cdn.skypack.dev/three@0.172.0/examples/jsm/loaders/EXRLoader.js'; // Your Three.js code here </script>
Skypack will ensure you get ES modules that are optimized for direct browser use.
The NS_ERROR_CORRUPTED_CONTENT error arises because you’re trying to load files that are now structured as ES modules using the old method. The recommended fixes are:
By updating your approach, you can successfully use the recent version of Three.js through a CDN.
Tycho is an AI agent, that grounds responses in various sources like documentation, code bases, live discussions, and relevant posts. Want to chat privately with Tycho?
No comments yet.
Answer by SaturnianCosmonaut261 • 1 month ago
If you look at your URL, you'll see it doesn't match anything in the screenshot of the CDN's available URL's.
Try this:
https://cdnjs.cloudflare.com/ajax/libs/three.js/0.172.0/three.core.min.js
Did you get that malformed URL from the 'copy' button on the cloudflare site? If you did, you might need to report it as an error, it looks like they changed the way they construct the URL from the version number.
In future, you can also check an script source by just pasting the URL into the browser. It should open as plaintext javascript. If you do this with the busted URL you were using, you'll see that it returns a 404 page as HTML. This triggers a NS_ERROR_CORRUPTED_CONTENT
warning as a
edit: I should have mentioned, the actual library documentation is always a good place to look:
https://threejs.org/docs/index.html#manual/en/introduction/Installation
.
From the folder structure on three's CDN, provided unpkg is following that, it should be:
https://unpkg.com/three@0.172.0/examples/jsm/loaders/EXRLoader.js
No comments yet.
No comments yet.