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

  1. Verify the browser and page are alive (page.MustInfo() or browser.HealthCheck) before calling InitJavascriptEnv.
  2. Recreate the page and call InitJavascriptEnv immediately after creation, before any navigation.
  3. Check Chrome/Chromium version compatibility with the rod version in use.
  4. 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

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


AI-assisted analysis of projectdiscovery/katana@e3e742739c (2026-09-03). Data as JSON: /api/errors/1d2577aa977f0e6d. Report an issue: GitHub.