package filesystem import ( "context" "errors" "fmt" "log" "net" "net/http" "net/url" "os" "path/filepath" "regexp" "strings" "sync" "time" ) const DefaultFileServerPort = 2652 // 预编译正则表达式(避免每次调用重复编译) var ( // CSS 相关 cssImportRegex = regexp.MustCompile(`@import\s+(?:url\s*\(\s*)?["']([^"']+)["']\s*\)?\s*;`) cssUrlRegex = regexp.MustCompile(`url\(\s*["']?([^"')]+)["']?\s*\)`) // HTML 标签 htmlLinkTagRegex = regexp.MustCompile(`]*)>`) htmlScriptTagRegex = regexp.MustCompile(` ` // 在
前插入 if strings.Contains(htmlContent, "") { return strings.Replace(htmlContent, "", script+"", 1) } // 没有 body 标签,在末尾插入 return htmlContent + script } // injectPathInterceptor 注入路径拦截脚本(处理 webpack 等动态加载的绝对路径资源) // 重写动态创建的 ` // 在
后立即插入(确保在任何其他脚本之前执行) if idx := strings.Index(htmlContent, "
"); idx >= 0 { return htmlContent[:idx+6] + script + htmlContent[idx+6:] } if idx := strings.Index(htmlContent, "
"); idx >= 0 { return htmlContent[:idx+6] + script + htmlContent[idx+6:] } // 没有 head 标签,在 和 后插入 if idx := strings.Index(htmlContent, "= 0 { end := strings.Index(htmlContent[idx:], ">") if end >= 0 { pos := idx + end + 1 return htmlContent[:pos] + script + htmlContent[pos:] } } return script + htmlContent }