{"record":{"id":"1d2577aa977f0e6d","repo":"projectdiscovery/katana","slug":"failed-to-inject-utils-js","errorCode":null,"errorMessage":"failed to inject utils.js","messagePattern":"failed to inject utils\\.js","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/engine/headless/js/js.go","lineNumber":21,"sourceCode":"import (\n\t_ \"embed\"\n\n\t\"github.com/go-rod/rod\"\n\t\"github.com/pkg/errors\"\n)\n\nvar (\n\t//go:embed utils.js\n\tutilsJavascriptBundle string\n\n\t//go:embed page-init.js\n\tpageInitJavascriptBundle string\n)\n\n// InitJavascriptEnv injects the necessary javascript code into the browser\nfunc InitJavascriptEnv(page *rod.Page) error {\n\tif _, err := page.EvalOnNewDocument(utilsJavascriptBundle); err != nil {\n\t\treturn errors.Wrap(err, \"failed to inject utils.js\")\n\t}\n\tif _, err := page.EvalOnNewDocument(pageInitJavascriptBundle); err != nil {\n\t\treturn errors.Wrap(err, \"failed to inject page-init.js\")\n\t}\n\treturn nil\n}\n","sourceCodeStart":3,"sourceCodeEnd":28,"githubUrl":"https://github.com/projectdiscovery/katana/blob/e3e742739c3746f085943ce918fb4e2b8daf6fe6/pkg/engine/headless/js/js.go#L3-L28","documentation":"InitJavascriptEnv injects bundled helper scripts (utils.js) into a rod-managed browser page via page.EvalOnNewDocument. This error means the CDP Page.addScriptToEvaluateOnNewDocument call failed. Common underlying causes are a closed/crashed browser or page, or a JS syntax/runtime error reported when evaluating the bundle.","triggerScenarios":"Calling InitJavascriptEnv on a *rod.Page whose browser has already crashed or been closed; the page's CDP session is dead; the utilsJavascriptBundle fails to parse/execute in the page's context.","commonSituations":"Browser OOM-killed under headless load; page navigated/closed mid-initialization; attempting setup after browser cleanup at the end of a run; incompatible Chrome/CDP version.","solutions":["Verify the browser and page are alive (page.MustInfo() or browser.HealthCheck) before calling InitJavascriptEnv.","Recreate the page and call InitJavascriptEnv immediately after creation, before any navigation.","Check Chrome/Chromium version compatibility with the rod version in use.","Inspect the wrapped CDP error for details (crashed target vs. script evaluation error)."],"exampleFix":"// before\npage := browser.MustPage(\"\")\n// long-running ops happen here...\n_ = js.InitJavascriptEnv(page)\n// after\npage := browser.MustPage(\"\")\nif err := js.InitJavascriptEnv(page); err != nil {\n    page = browser.MustPage(\"\") // recreate dead page and retry\n    if err := js.InitJavascriptEnv(page); err != nil { return err }\n}","handlingStrategy":"try-catch","validationCode":"// verify the page/browser are usable before injecting\nif page == nil {\n    return errors.New(\"page is nil; cannot init javascript env\")\n}","typeGuard":null,"tryCatchPattern":"// Go: recreate the page and retry once on injection failure\nif err := js.InitJavascriptEnv(page); err != nil {\n    page = browser.MustPage(\"\")\n    if err := js.InitJavascriptEnv(page); err != nil {\n        return fmt.Errorf(\"init javascript env after retry: %w\", err)\n    }\n}","preventionTips":["Call InitJavascriptEnv immediately after page creation, before navigation.","Keep Chrome and rod versions compatible; pin both in CI.","Monitor browser memory to avoid OOM crashes mid-initialization."],"tags":["browser-automation","javascript","cdp"],"backgroundTag":"script-injection-failed","analyzedSha":"e3e742739c3746f085943ce918fb4e2b8daf6fe6","analyzedAt":"2026-09-03T14:55:13.248Z","contentChangedAt":"2026-09-03T14:55:13.248Z","schemaVersion":2},"datasetVersion":"2026-09-10T17:17:09.494Z"}