feat: Execute inline scripts in advance

This commit is contained in:
hamster1963 2024-12-17 20:55:41 +08:00
parent f77a3255be
commit 0fd34e0c0b

View File

@ -78,14 +78,13 @@ export const InjectContext = (content: string) => {
cleanInjectedResources() cleanInjectedResources()
const externalScriptQueue: Promise<void>[] = [] const externalScriptQueue: Promise<void>[] = []
const inlineScripts: HTMLScriptElement[] = []
Array.from(tempDiv.childNodes).forEach((node) => { Array.from(tempDiv.childNodes).forEach((node) => {
if (node.nodeType === Node.ELEMENT_NODE) { if (node.nodeType === Node.ELEMENT_NODE) {
const element = node as HTMLElement const element = node as HTMLElement
if (element.tagName === "SCRIPT" && !(element as HTMLScriptElement).src) { if (element.tagName === "SCRIPT" && !(element as HTMLScriptElement).src) {
// 收集内联脚本,稍后执行 // 直接执行内联脚本
inlineScripts.push(element as HTMLScriptElement) executeInlineScript(element as HTMLScriptElement)
} else { } else {
const handler = handlers[element.tagName] || handlers.DEFAULT const handler = handlers[element.tagName] || handlers.DEFAULT
externalScriptQueue.push(handler(element)) externalScriptQueue.push(handler(element))
@ -95,11 +94,7 @@ export const InjectContext = (content: string) => {
} }
}) })
// 等待外部脚本加载完成后再执行内联脚本
return Promise.all(externalScriptQueue) return Promise.all(externalScriptQueue)
.then(() => {
inlineScripts.forEach((script) => executeInlineScript(script))
})
.then(() => { .then(() => {
console.log("All resources have been injected successfully.") console.log("All resources have been injected successfully.")
}) })