The event has already fired by the time that code hooks it. The way Babel standalone works is by responding to DOMContentLoaded
by finding and executing all of the type="text/babel"
scripts on the page. You can see this in the index.js
file:
// Listen for load event if we're in a browser and then kick off finding and
// running of scripts with "text/babel" type.
const transformScriptTags = () => runScripts(transform);
if (typeof window !== 'undefined' && window && window.addEventListener) {
window.addEventListener('DOMContentLoaded', transformScriptTags, false);
}
Just run the code directly, without waiting for the event, since you know Babel standalone will wait for it for you.
Also note that if you put you script at the end of the body, just before the closing </body>
tag, there's no need to wait for DOMContentLoaded
even if you don't use Babel. All of the elements defined above the script will exist and be available to your script.
In a comment you've asked:
But I am using Babel standalone in development, but I will pre-compile it when I go into production. Should I add it back on when I go into production?
Just ensure that your script
tag is at the end of body
as described above, and there's no need to use the event.
If it's important to you to use it anyway, you can check to see whether the event has already run by checking document.readyState
(after following the link, scroll up a bit):
function onReady() {
// ...your code here...
}
if (document.readyState !== "loading") {
onReady(); // Or setTimeout(onReady, 0); if you want it consistently async
} else {
document.addEventListener("DOMContentLoaded", onReady);
}
document.readyState
goes through these stages (scroll up slightly from the link above):
Returns "loading"
while the Document is loading, "interactive"
once it is finished parsing but still loading sub-resources, and "complete"
once it has loaded.
DOMContentLoaded
. Your script is already at the very end of the document, which is plenty good enough. – Incurabletext/babel
type to your script? – Orthicon