
如何动态获取script脚本
用户关注问题
我想在网页加载后,根据条件动态加载外部JavaScript文件,有哪些方法可以实现?
使用DOM操作动态加载外部脚本
可以通过JavaScript创建一个新的script元素,设置其src属性为外部脚本的URL,然后将其添加到文档的head或body中。例如:
const script = document.createElement('script');
script.src = 'path/to/your/script.js';
document.head.appendChild(script);
这样,外部脚本就会被动态加载并执行。
如果我的脚本内容是通过接口返回的字符串形式,怎么在浏览器中动态执行这段代码?
使用eval或新的script标签执行动态代码
可以使用eval函数直接执行字符串形式的JavaScript代码,或者创建一个新的script标签,将代码内容作为文本节点插入其中。例如:
const code = 'console.log("Hello World")';
// 方案一:eval(code);
// 方案二:
const script = document.createElement('script');
script.text = code;
document.head.appendChild(script);
前者简单,但存在安全风险,后者更安全且兼容性较好。
在动态加载多个脚本时,如何保证它们按照指定顺序依次执行?
使用回调或Promise控制脚本加载顺序
动态加载脚本时,可以监听script标签的onload事件,确保前一个脚本加载完成后再加载后续脚本。例如:
function loadScript(src) {
return new Promise((resolve) => {
const script = document.createElement('script');
script.src = src;
script.onload = () => resolve();
document.head.appendChild(script);
});
}
loadScript('script1.js')
.then(() => loadScript('script2.js'))
.then(() => console.log('All scripts loaded in order'));
这样可以确保脚本依次加载并执行,避免因异步加载导致的顺序问题。