Summary
A merchant on Chrome for Windows cannot use the primary action my app puts in the admin title bar via <s-page>. Clicking the button does nothing: the onClick handler never runs, no request leaves the app, no console error. The same click works the moment she opens DevTools and switches to the mobile viewport. It has now happened on three separate days over the last two weeks, always straight after a client-side navigation. I cannot reproduce it on Chrome for macOS.
Setup
- Embedded app, App Home, Polaris web components loaded from
https://cdn.shopify.com/shopifycloud/polaris.jswithhttps://cdn.shopify.com/shopifycloud/app-bridge.js - React 19 + React Router 6 SPA inside the admin iframe
- The button is a direct child of
<s-page>:
<s-page heading="#PO-1078" inlineSize="large">
<s-button slot="secondary-actions" tone="critical" commandFor="po-delete" command="--show">Delete</s-button>
<s-button slot="secondary-actions" commandFor="po-more-actions-menu">More actions</s-button>
<s-button slot="primary-action" variant="primary" onClick={handleMarkOrderedClick}>Mark as ordered</s-button>
...
</s-page>
Steps the merchant takes
- Open the app’s list page from the admin sidebar
- Click the list page’s primary action (client-side navigation to the create form)
- Fill the form and save (client-side navigation to the saved record, same
<s-page>component, the primary action above is now rendered) - Click “Mark as ordered” in the title bar
Result: nothing. The title bar draws the button as enabled and clickable, the click is swallowed. In one of the three occurrences she refreshed the page and it still did nothing. Each time, opening DevTools and switching to the mobile viewport made the very next click work, and the record went through normally.
What I have checked
- The record is valid server-side. Once the click gets through, the request succeeds first time.
- My handler cannot be silently failing: every branch either shows a banner on the page or issues the request. Neither happened.
- Reading
app-bridge.js, the title bar is built froms-page > s-button[slot="primary-action"], the element is hidden withdisplay: none, and a click in the admin title bar comes back into the iframe asTitleBar.buttons.button.clickwith the button’s internal id, which App Bridge resolves to the element and calls.click()on. Nothing on the iframe side of that path depends on viewport width, so the click is being lost either in the admin title bar or in that relay. - The bulk action on the list page, which is a normal in-iframe button, works for her at any width.
Related threads
- S-page page actions not working in Chrome 143 describes the same surface (title bar actions dead after a client-side navigation, Chrome only, Firefox and Safari fine). The last update there is from December 2025 with two mitigations and “we will keep communicating in this thread”, and nothing since.
- S-link breadcrumb-actions slot inside s-page not redirecting had the primary action reproduced by Shopify in December, and was closed in August as no longer reproducible.
Questions
- Was the Chrome eventing issue from the first thread fixed in App Bridge, and if so when? The behaviour I am seeing looks like the same bug still present on Windows.
- Is there anything in the admin title bar that behaves differently on the desktop layout versus the mobile layout for app primary actions? The viewport switch fixing it is the strongest signal I have.
- Is the ref-based
addEventListenermitigation from the first thread still the recommended workaround, given it double-fires handlers on a fresh page load?