<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic iOS Safari Wiping Custom Form Fields After Accept.js Popup Opens in Integration and Testing</title>
    <link>https://community.developer.cybersource.com/t5/Integration-and-Testing/iOS-Safari-Wiping-Custom-Form-Fields-After-Accept-js-Popup-Opens/m-p/95358#M58919</link>
    <description>&lt;P class=""&gt;&lt;STRONG&gt;iOS Safari Memory Management Clearing Form Fields Before tokenization — Phone/Job Number/Signature Missing ~5% of Transactions&lt;/STRONG&gt;&lt;/P&gt;&lt;HR /&gt;&lt;P class=""&gt;&lt;STRONG&gt;Background / What We're Building&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;We have a custom payment form for a moving company (Safebound Moving &amp;amp; Storage) built on Webflow, processed through Authorize.net Accept.js, with a Netlify serverless function handling the backend. The form collects:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Customer name, email, billing address, phone&lt;/LI&gt;&lt;LI&gt;Job number (sent as Invoice Number to Authorize.net)&lt;/LI&gt;&lt;LI&gt;Payment amount (variable — every job is different)&lt;/LI&gt;&lt;LI&gt;Payment type (Deposit / Pickup / Delivery / Storage)&lt;/LI&gt;&lt;LI&gt;Signature (stored via Cloudinary, sent via Web3Forms email)&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;Everything works correctly on desktop and Android. Payments always complete successfully on iOS Safari as well — &lt;STRONG&gt;the transaction itself is never the problem.&lt;/STRONG&gt;&lt;/P&gt;&lt;HR /&gt;&lt;P class=""&gt;&lt;STRONG&gt;The Issue&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;On iOS Safari (iPhone/iPad), approximately 1–2 out of every 20–30 payments arrives with one or more of these three fields missing: &lt;STRONG&gt;phone number, job number, or signature.&lt;/STRONG&gt; The payment clears, the customer is charged, but our records are incomplete.&lt;/P&gt;&lt;P class=""&gt;The root cause appears to be &lt;STRONG&gt;iOS Safari's aggressive memory/state management when the Accept.js payment popup opens.&lt;/STRONG&gt; The fields appear filled when the customer taps the pay button — iOS clears them &lt;EM&gt;after&lt;/EM&gt; the popup launches, not before. So client-side validation passes, but by the time our serverless function reads the submitted data, those fields are empty.&lt;/P&gt;&lt;HR /&gt;&lt;P class=""&gt;&lt;STRONG&gt;What We've Already Tried&lt;/STRONG&gt;&lt;/P&gt;&lt;OL class=""&gt;&lt;LI&gt;&lt;STRONG&gt;Snapshot on button click (savedFormValues)&lt;/STRONG&gt; — Saved all field values the moment the button was clicked, before the popup opened. iOS was clearing JS memory along with the DOM, so the snapshot was also empty. Some users got a "Session expired" error and couldn't pay at all — worse than missing fields.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Live read + fallback to snapshot&lt;/STRONG&gt; — Read fields live first, fall back to snapshot if empty. Didn't help because iOS cleared both simultaneously.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Red border / required field validation + auto-scroll&lt;/STRONG&gt; — Reduced frequency but didn't eliminate it. The fields look filled when the button is clicked; iOS clears them after the popup opens, so validation passes before the problem occurs.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Changed phone field type from tel to plain text&lt;/STRONG&gt; — No difference. iOS clears all field types equally.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Authorize.net Hosted Payment Page&lt;/STRONG&gt; — Doesn't support custom/variable amount entry. Not viable since every job has a unique payment amount.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Inline card fields (no popup)&lt;/STRONG&gt; — Eliminated the missing fields issue but caused complete payment failures on iOS Safari instead. Traded one problem for a worse one.&lt;/LI&gt;&lt;/OL&gt;&lt;HR /&gt;&lt;P class=""&gt;&lt;STRONG&gt;The Core Constraint&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;We need:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Variable payment amounts entered by the customer&lt;/LI&gt;&lt;LI&gt;Accept.js or equivalent Authorize.net integration&lt;/LI&gt;&lt;LI&gt;Non-popup card entry that actually works on iOS Safari&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;The hosted payment page solves the iOS issue but breaks variable amounts. Inline fields break payments on iOS entirely.&lt;/P&gt;&lt;P class=""&gt;&lt;STRONG&gt;Has anyone solved this pattern — persisting custom form field data through the Accept.js popup flow on iOS Safari?&lt;/STRONG&gt; Specifically: is there a way to pass additional metadata (phone, job number) server-side at the point of transaction, or store it in a way iOS Safari can't wipe? Would using localStorage or sessionStorage before the popup opens be more iOS-resistant than JS variables? Any guidance appreciated.&lt;/P&gt;</description>
    <pubDate>Mon, 08 Jun 2026 18:28:43 GMT</pubDate>
    <dc:creator>jamess96</dc:creator>
    <dc:date>2026-06-08T18:28:43Z</dc:date>
    <item>
      <title>iOS Safari Wiping Custom Form Fields After Accept.js Popup Opens</title>
      <link>https://community.developer.cybersource.com/t5/Integration-and-Testing/iOS-Safari-Wiping-Custom-Form-Fields-After-Accept-js-Popup-Opens/m-p/95358#M58919</link>
      <description>&lt;P class=""&gt;&lt;STRONG&gt;iOS Safari Memory Management Clearing Form Fields Before tokenization — Phone/Job Number/Signature Missing ~5% of Transactions&lt;/STRONG&gt;&lt;/P&gt;&lt;HR /&gt;&lt;P class=""&gt;&lt;STRONG&gt;Background / What We're Building&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;We have a custom payment form for a moving company (Safebound Moving &amp;amp; Storage) built on Webflow, processed through Authorize.net Accept.js, with a Netlify serverless function handling the backend. The form collects:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Customer name, email, billing address, phone&lt;/LI&gt;&lt;LI&gt;Job number (sent as Invoice Number to Authorize.net)&lt;/LI&gt;&lt;LI&gt;Payment amount (variable — every job is different)&lt;/LI&gt;&lt;LI&gt;Payment type (Deposit / Pickup / Delivery / Storage)&lt;/LI&gt;&lt;LI&gt;Signature (stored via Cloudinary, sent via Web3Forms email)&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;Everything works correctly on desktop and Android. Payments always complete successfully on iOS Safari as well — &lt;STRONG&gt;the transaction itself is never the problem.&lt;/STRONG&gt;&lt;/P&gt;&lt;HR /&gt;&lt;P class=""&gt;&lt;STRONG&gt;The Issue&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;On iOS Safari (iPhone/iPad), approximately 1–2 out of every 20–30 payments arrives with one or more of these three fields missing: &lt;STRONG&gt;phone number, job number, or signature.&lt;/STRONG&gt; The payment clears, the customer is charged, but our records are incomplete.&lt;/P&gt;&lt;P class=""&gt;The root cause appears to be &lt;STRONG&gt;iOS Safari's aggressive memory/state management when the Accept.js payment popup opens.&lt;/STRONG&gt; The fields appear filled when the customer taps the pay button — iOS clears them &lt;EM&gt;after&lt;/EM&gt; the popup launches, not before. So client-side validation passes, but by the time our serverless function reads the submitted data, those fields are empty.&lt;/P&gt;&lt;HR /&gt;&lt;P class=""&gt;&lt;STRONG&gt;What We've Already Tried&lt;/STRONG&gt;&lt;/P&gt;&lt;OL class=""&gt;&lt;LI&gt;&lt;STRONG&gt;Snapshot on button click (savedFormValues)&lt;/STRONG&gt; — Saved all field values the moment the button was clicked, before the popup opened. iOS was clearing JS memory along with the DOM, so the snapshot was also empty. Some users got a "Session expired" error and couldn't pay at all — worse than missing fields.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Live read + fallback to snapshot&lt;/STRONG&gt; — Read fields live first, fall back to snapshot if empty. Didn't help because iOS cleared both simultaneously.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Red border / required field validation + auto-scroll&lt;/STRONG&gt; — Reduced frequency but didn't eliminate it. The fields look filled when the button is clicked; iOS clears them after the popup opens, so validation passes before the problem occurs.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Changed phone field type from tel to plain text&lt;/STRONG&gt; — No difference. iOS clears all field types equally.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Authorize.net Hosted Payment Page&lt;/STRONG&gt; — Doesn't support custom/variable amount entry. Not viable since every job has a unique payment amount.&lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Inline card fields (no popup)&lt;/STRONG&gt; — Eliminated the missing fields issue but caused complete payment failures on iOS Safari instead. Traded one problem for a worse one.&lt;/LI&gt;&lt;/OL&gt;&lt;HR /&gt;&lt;P class=""&gt;&lt;STRONG&gt;The Core Constraint&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;We need:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Variable payment amounts entered by the customer&lt;/LI&gt;&lt;LI&gt;Accept.js or equivalent Authorize.net integration&lt;/LI&gt;&lt;LI&gt;Non-popup card entry that actually works on iOS Safari&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;The hosted payment page solves the iOS issue but breaks variable amounts. Inline fields break payments on iOS entirely.&lt;/P&gt;&lt;P class=""&gt;&lt;STRONG&gt;Has anyone solved this pattern — persisting custom form field data through the Accept.js popup flow on iOS Safari?&lt;/STRONG&gt; Specifically: is there a way to pass additional metadata (phone, job number) server-side at the point of transaction, or store it in a way iOS Safari can't wipe? Would using localStorage or sessionStorage before the popup opens be more iOS-resistant than JS variables? Any guidance appreciated.&lt;/P&gt;</description>
      <pubDate>Mon, 08 Jun 2026 18:28:43 GMT</pubDate>
      <guid>https://community.developer.cybersource.com/t5/Integration-and-Testing/iOS-Safari-Wiping-Custom-Form-Fields-After-Accept-js-Popup-Opens/m-p/95358#M58919</guid>
      <dc:creator>jamess96</dc:creator>
      <dc:date>2026-06-08T18:28:43Z</dc:date>
    </item>
  </channel>
</rss>

