In the Shopify iOS app, tapping Cancel and then Discard on the App Bridge Save Bar leaves the embedded page unresponsive. It can’t be scrolled or tapped. Shopify’s bottom navigation still works, and leaving and coming back restores the page. “Keep editing” doesn’t cause the problem. Desktop web and mobile Safari aren’t affected.
Environment
- Shopify Mobile iOS 11.2644.0 (Build 314668), iOS 18.7, iPhone
- App Bridge from
cdn.shopify.com/shopifycloud/app-bridge.js - Embedded app on a development store
- Android not tested
Steps to reproduce
-
Open an embedded app with this page in the iOS app:
<input id="field" value="5" /> <ui-save-bar id="bar"> <button variant="primary">Save</button> <button id="discard">Discard</button> </ui-save-bar> <script> const bar = document.getElementById('bar') document.getElementById('field').addEventListener('input', () => bar.show()) document.getElementById('discard').addEventListener('click', () => bar.hide()) </script> -
Change the field so the Save Bar appears.
-
Tap Cancel, then Discard in the “You have unsaved changes” dialog.
-
Try to scroll or tap the page.
Expected: the page keeps responding.
Actual: the page stops responding until you navigate away with the bottom navigation and return.
What we measured
We logged touches and page state on a test page:
touchstart,pointerdownandscrollcounts all stay flat after Discard.- JavaScript keeps running, with timers still firing and no errors.
- The page has no scroll lock or
inert.
| Variation | Result |
|---|---|
Calling hide() one second later |
Still freezes |
data-save-bar form instead of ui-save-bar |
Still freezes |
| Polaris web components loaded | Still freezes |
| Keyboard closed before tapping Cancel | Still freezes |
history.pushState after Discard |
Still freezes |
location.reload() after Discard |
Still freezes, even on the freshly loaded page |
Because a freshly loaded page stays frozen, the block seems to be outside the web page, possibly something left over from the dialog.
Workaround we found
Hiding the bar, waiting 500ms, then calling open('shopify://admin/apps/<client id>', '_top') restored touch without a page reload. It worked both times we tried it, on the app’s root URL only. Our test URL also carried a query parameter (?v=top).
This may be related to the Android Discard issue fixed in October, since it happens at the same step.
Can you reproduce this, and is the shopify:// navigation safe to rely on until there’s a fix?