fix(analytics): drop browser-extension exceptions in before_send - #19814
Draft
Conversation
Extensions like Dark Reader inject an inline script into the page. When that script throws, its one frame is "global code" at line 1 of the document URL and is marked in_app, so error tracking reads it as a first-party error. The fingerprint keys off the page URL, so every new page one of these visitors loads mints a fresh issue. Add a before_send rule that drops any exception whose only frame is "global code" at line 1 of the document URL. Our own code loads from separate script files, never inline in the page, so this shape is always extension noise. Stacked on #19599, whose no-in_app-frame rule does not catch this case because the injected frame has in_app set. Generated-By: PostHog Desktop Task-Id: 30ce005e-65dd-426a-a0d1-bd1f72c56259
Contributor
Author
🦔 PostHog Review reviewed this pull requestFound 1 must fix, 0 should fix, 0 consider. Published 1 finding (view the review). Resolved comments: 1 fixed |
Contributor
Deploy preview
|
Contributor
Author
|
PostHog Review alpha 🦔 If you find any issues helpful - please reply "valid", "invalid", etc., for evaluation purposes 🙏 |
Contributor
Bundle reportTotal JS (gzip)8.15 MiB (+0.7 KiB / +0.0%) Eager graph (modules shipped in each entrypoint's initial chunks)
Largest modules in the
|
| Module | Size |
|---|---|
./src/data/mcp-tools.json |
1053.9 KiB |
css ./node_modules/.pnpm/css-loader@5.2.7_webpack@5.101.3/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[8].oneOf[1].use[1]!./node_modules/.pnpm/postcss-loader@4.3.0_postcss@8.5.6_webpack@5.101.3/node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[8].oneOf[1].use[2]!./src/styles/global.css |
754.5 KiB |
./src/components/Stickers/Stickers.tsx |
696.4 KiB |
./node_modules/.pnpm/@radix-ui+react-icons@1.3.2_react@18.3.1/node_modules/@radix-ui/react-icons/dist/react-icons.esm.js |
481.4 KiB |
./node_modules/.pnpm/rehype-raw@7.0.0/node_modules/rehype-raw/lib/index.js + 29 modules |
395.1 KiB |
./src/hooks/useCustomers.tsx + 55 modules |
370.0 KiB |
./node_modules/.pnpm/@posthog+icons@0.36.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js |
354.8 KiB |
./node_modules/.pnpm/react-markdown@8.0.7_@types+react@16.14.66_react@18.3.1/node_modules/react-markdown/lib/react-markdown.js + 88 modules |
351.4 KiB |
./src/components/ProductComparisonTable/index.tsx + 126 modules |
301.7 KiB |
./node_modules/.pnpm/cloudinary-core@2.14.0_lodash@4.17.21/node_modules/cloudinary-core/cloudinary-core.js |
281.9 KiB |
./src/components/SearchUI/index.tsx + 87 modules |
273.0 KiB |
./node_modules/.pnpm/@posthog+brand@0.8.0_react@18.3.1/node_modules/@posthog/brand/dist/generated/hoggies/svg/magnifying-glass.mjs |
254.7 KiB |
./node_modules/.pnpm/framer-motion@10.18.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/framer-motion/dist/es/render/dom/motion.mjs + 109 modules |
253.9 KiB |
./node_modules/.pnpm/d3@7.9.0/node_modules/d3/src/index.js + 208 modules |
247.4 KiB |
./src/components/Pricing/PricingSlider/Slider.tsx + 87 modules |
240.1 KiB |
Eager-graph budgets are report-only until a baseline is established. Sizes are gzip of public/**/*.js; eager size is webpack module source bytes for the modules actually shipped in the entrypoint's initial chunks (post-tree-shake).
…d JS The `before_send` document-URL guard used `.replace(/\/$/, '')` inside the `posthogScript` template literal. Because `\/` is not a recognized escape sequence, the template literal dropped the backslash, so the emitted static/scripts/posthog-init.js contained `.replace(//$/, '')` — `//` starts a line comment and the `.replace(` call never closes, making the whole file a syntax error. The browser would discard posthog-init.js, so posthog never initialized (analytics, error tracking, flags, session replay all broken). Escape the backslash (`/\\/$/`) in both occurrences so the generated file contains the intended `/\/$/` regex. Verified with node that both emitted lines parse and that the regex still strips a single trailing slash. Generated-By: PostHog Desktop Task-Id: f94556e3-6d05-4e30-a26b-d83e8e61f44e
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.
Changes
Problem
global codeat line 1 of the document URL and is markedin_app, so the event reads as a first-party site error.before_senddid not catch this shape. #19599 does not cover it either: its rule drops exceptions with noin_appframe, and this frame hasin_appset.Fix — extend the single
before_sendhook (gatsby/onPreBootstrap.ts), stacked on #19599:global codeat line 1 of the document URLOur own code loads from separate
.jsfiles, so a frame whose filename is the page's own document URL is always injected script.Agent context
ReferenceError: Can't find variable: DarkReaderon iOS Safari.DarkReaderexists nowhere in this repo. A sibling variant (Can't find variable: __firefox__) has the same shape and is dropped by the same rule.Checklist
vercel.jsonCreated with PostHog Desktop from this inbox report.