grafana/k6 · error
adding web vital init script to new browser context
Error message
adding web vital init script to new browser context: %w
What it means
After registering the web-vitals IIFE, each new BrowserContext also registers the web-vitals init script (the polling/reporting half) through the same AddInitScript path, injecting it into every already-open page. This error wraps that second registration failing. Like [617], the script body is a k6 constant, so failures come from the CDP calls against existing pages, not from user code.
Solutions
- Create contexts up front, before navigating/crashing workloads
- Close unusable pages before creating a new context
- Retry the context creation once
- Enable K6_BROWSER_LOG=debug and update k6 if it persists
Defensive patterns
Strategy: retry
Try / catch
try {
ctx = browser.newContext();
} catch (e) {
if (String(e).includes('adding web vital init script')) {
await sleep(1000); // let dying page sessions finish detaching
ctx = browser.newContext(); // retry once
} else throw e;
} Prevention
- Keep context creation away from page-crash windows and shutdown
- Stabilize or close failing pages before new contexts
- Stay current on k6 releases for web-vital injection fixes
When it happens
Trigger: browser.newContext() with existing pages whose sessions are closed or targets crashed; context creation racing browser/connection shutdown so Page.addScriptToEvaluateOnNewDocument fails.
Common situations: Creating contexts late in a test while other pages are crashing or closing; browser under memory pressure dropping page sessions; teardown races.
Related errors
- adding web vital script to new browser context
- adding init script to browser context
- clearing permissions
- disposing browser context ID
- disposing browser context
AI-assisted analysis of grafana/k6@01ffac6f24 (2026-08-18).
Data as JSON: /api/errors/4acf8b8e15df94b7.
Report an issue: GitHub.
Appendix: source
Thrown at internal/js/modules/k6/browser/common/browser_context.go:154
browser: browser,
id: id,
opts: opts,
logger: logger,
timeoutSettings: NewTimeoutSettings(nil),
}
if len(opts.Permissions) > 0 {
err := b.GrantPermissions(opts.Permissions, GrantPermissionsOptions{})
if err != nil {
return nil, err
}
}
if err := b.AddInitScript(js.WebVitalIIFEScript); err != nil {
return nil, fmt.Errorf("adding web vital script to new browser context: %w", err)
}
if err := b.AddInitScript(js.WebVitalInitScript); err != nil {
return nil, fmt.Errorf("adding web vital init script to new browser context: %w", err)
}
if err := b.setDownloadsPath(opts.DownloadsPath); err != nil {
return nil, fmt.Errorf("setting downloads path: %w", err)
}
return &b, nil
}
// AddInitScript adds a script that will be initialized on all new pages.
func (b *BrowserContext) AddInitScript(script string) error {
b.logger.Debugf("BrowserContext:AddInitScript", "bctxid:%v", b.id)
b.evaluateOnNewDocumentSources = append(b.evaluateOnNewDocumentSources, script)
for _, p := range b.browser.getPages() {
if err := p.evaluateOnNewDocument(script); err != nil {
return fmt.Errorf("adding init script to browser context: %w", err)
}View on GitHub (pinned to 01ffac6f24)