Files
eranos/src
Alex Gleason 0416b20a46 Fix iOS sandbox: use capacitor:// scheme with swizzled asset handler
Root cause: WKWebView does not invoke WKURLSchemeHandler for iframe
loads when the iframe uses a different scheme than the parent page.
The app uses capacitor:// (iosScheme: 'https' is normalised to
capacitor:// by Capacitor since https is a built-in scheme), but
sandbox iframes were using sbx:// — a cross-scheme load that WebKit
silently ignores.

Fix: Sandbox iframes now use capacitor://<id>.sandbox.local/path
(same scheme as the parent app). Capacitor's WebViewAssetHandler is
the sole handler for the capacitor:// scheme, so we swizzle its
webView(_:start:) and webView(_:stop:) methods at runtime to
intercept requests whose hostname ends with .sandbox.local. These
are forwarded to the JS layer for resolution. All other requests
pass through to the original Capacitor implementation.

This removes the standalone IframeSandboxSchemeHandler and the sbx
scheme registration in DittoBridgeViewController. The swizzle is
installed in SandboxPlugin.load(), keeping the architecture simple:
one plugin, one request handler, no separate scheme.

Also cleans up diagnostic logging from the investigation, retaining
only the diagnose() plugin method for future debugging.
2026-04-12 19:03:42 -05:00
..