projectdiscovery/katana · error
failed to inject utils.js
Error message
failed to inject utils.js
What it means
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.
Source
Thrown at pkg/engine/headless/js/js.go:21
import (
_ "embed"
"github.com/go-rod/rod"
"github.com/pkg/errors"
)
var (
//go:embed utils.js
utilsJavascriptBundle string
//go:embed page-init.js
pageInitJavascriptBundle string
)
// InitJavascriptEnv injects the necessary javascript code into the browser
func InitJavascriptEnv(page *rod.Page) error {
if _, err := page.EvalOnNewDocument(utilsJavascriptBundle); err != nil {
return errors.Wrap(err, "failed to inject utils.js")
}
if _, err := page.EvalOnNewDocument(pageInitJavascriptBundle); err != nil {
return errors.Wrap(err, "failed to inject page-init.js")
}
return nil
}
View on GitHub (pinned to e3e742739c)
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).
Example fix
// before
page := browser.MustPage("")
// long-running ops happen here...
_ = js.InitJavascriptEnv(page)
// after
page := browser.MustPage("")
if err := js.InitJavascriptEnv(page); err != nil {
page = browser.MustPage("") // recreate dead page and retry
if err := js.InitJavascriptEnv(page); err != nil { return err }
} Defensive patterns
Strategy: try-catch
Validate before calling
// verify the page/browser are usable before injecting
if page == nil {
return errors.New("page is nil; cannot init javascript env")
} Try / catch
// Go: recreate the page and retry once on injection failure
if err := js.InitJavascriptEnv(page); err != nil {
page = browser.MustPage("")
if err := js.InitJavascriptEnv(page); err != nil {
return fmt.Errorf("init javascript env after retry: %w", err)
}
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- failed to inject page-init.js
- could not initialize javascript env
- could not create new page
- could not initialize stealth
- could not enable fetch domain
AI-assisted analysis of projectdiscovery/katana@e3e742739c (2026-09-03).
Data as JSON: /api/errors/1d2577aa977f0e6d.
Report an issue: GitHub.