
本文介绍一种无需 `settimeout` 的可靠方式,用于加载包含 html 片段和 `
在前端动态加载混合内容(HTML + 内联 JS)时,常见误区是依赖 setTimeout 模拟脚本执行完成,或错误地监听 DOMContentLoaded(该事件属于 document,不适用于单个
以下是优化后的 loadVanilla 方法实现:
loadVanilla: async function(arg, parent = null, callback = null) {
return new Promise(async (resolve, reject) => {
try {
const res = await fetch(arg);
// ✅ 关键检查:HTTP 状态是否成功
if (!res.ok) {
throw new Error(`HTTP ${res.status}: ${res.statusText}`);
}
const html = await res.text();
// ✅ 安全解析:提取 HTML 内容与脚本内容(建议使用更健壮的正则或 DOMParser,此处保留原逻辑作示例)
const scriptStartTag = '';
const hcMatch = html.split(scriptStartTag)[0];
const scMatch = html.split(scriptStartTag)[1]?.split(scriptEndTag)[0];
if (!scMatch) {
throw new Error('No :适用于无 async/defer 的内联脚本(动态创建默认为同步),是比 setTimeout 更精确、更可靠的执行完成信号。
此方案彻底摆脱了对 setTimeout 的依赖,语义清晰、错误可控、DOM 安全,是动态加载混合内容的推荐实践。
立即学习“前端免费学习笔记(深入)”;










