无法修改HTML时,如何在script.js中引入init.js并调用init函数?
如何在无法修改HTML的情况下从script.js访问外部init函数?
你的代码失效的核心原因是:动态创建<script>标签加载init.js是异步操作——浏览器会继续执行后续代码,不会等待这个脚本加载完成。所以当你执行window.onload = init时,init函数还没被定义。
可行的解决方法有两种:
方法一:监听脚本加载完成事件
通过script.onload确保init.js加载并执行完毕后,再绑定window.onload事件:
let script = document.createElement('script'); script.src = "../init.js"; script.onload = function() { window.onload = init; }; document.head.appendChild(script);
方法二:强制同步加载(不推荐,可能阻塞页面)
设置script.async = false,让浏览器按顺序加载并执行这个脚本,此时后续代码可以直接访问init:
let script = document.createElement('script'); script.src = "../init.js"; script.async = false; document.head.appendChild(script); window.onload = init;
补充说明:init.js中的函数默认会挂载到全局window对象上,只要脚本加载完成,就能全局访问。这样既实现了代码拆分,也能让其他脚本调用init函数。
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

