fix(browser): prevent const redeclaration in evaluateWithArgs#1834
Open
lw-yang wants to merge 1 commit into
Open
fix(browser): prevent const redeclaration in evaluateWithArgs#1834lw-yang wants to merge 1 commit into
lw-yang wants to merge 1 commit into
Conversation
…lobal const redeclaration Chrome's Runtime.evaluate shares a single global execution context per page. Top-level `const` declarations persist across calls, so when the same variable name is used in multiple evaluateWithArgs invocations (e.g. `markerAttr` in both click resolution and file upload), the second call throws: "SyntaxError: Identifier 'markerAttr' has already been declared" This wraps the generated code in an IIFE so declarations are scoped to a function body and never leak into the global context. Reproducer: any command that calls both tryCdpOnResolvedElement() and uploadFile() in sequence (e.g. `opencli browser <s> upload <ref> file.png`). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
evaluateWithArgsnow wraps its generatedconstdeclarations in an IIFE instead of emitting them as bare top-level statementsSyntaxError: Identifier 'markerAttr' has already been declaredwhen multiple browser commands run in sequence on the same pageProblem
Chrome's
Runtime.evaluateshares a single global execution context per page. Top-levelconstdeclarations persist across calls. When two methods both inject the same variable name viaevaluateWithArgs(e.g.markerAttrintryCdpOnResolvedElementanduploadFile), the second call fails:Reproducer: any
opencli browser <session> upload <ref> file.pngcommand — it calls click resolution (which injectsmarkerAttr) then upload (which also injectsmarkerAttr).Fix
Wrap the generated code in an IIFE so
constdeclarations are function-scoped:Test plan
vitest run --project unit src/browser/base-page.test.ts)opencli browser <s> uploadnow works on xiaohongshu creator center (was 100% repro before fix)🤖 Generated with Claude Code