Merge pull request #19 from hamster1963/feat/inject

feat: execute inline scripts in advance
This commit is contained in:
仓鼠 2024-12-17 20:59:19 +08:00 committed by GitHub
commit 91ef51519f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

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.")
}) })