So Safari offers Scan Credit Card feature on iOS8 with some credit card forms.
My question is, how does Safari determine when to offer this option?
So far I found that this option is available on Amazon and PayPal, but none of my credit card input forms were able to reproduce this behaviour.
After a bit of research with an iOS8 browser and Chrome emulation I figured it out partially. I know of some solutions, but I don't know for sure if there are other ways to do it. You'll have to thank Apple for the amazing lack of documentation around this.
Currently Netflix/Amazon have credit card scanning working properly. So I emulated an iOS8 user agent in my Chrome browser and inspected the markup of their credit card number field. Here's Netflix's:
<input name="cardNumber" smopname="num" id="cardNumber-CC" class="cardNumber" type="text" value="************0891" pattern="[0-9]*">
And here's Amazon's:
<input name="addCreditCardNumber" size="20" maxlength="20">
At that point I played around with a form served over HTTPS that I had control over and started setting attributes to see what would happen. Below, "works" means "successfully triggered card scan" and "doesn't work" means "did not trigger card scan":
name="addCreditCardNumber"
=> worksname="cardNumber"
=> worksname="cardnumber"
=> worksclass="cardNumber"
=> does not worktype="cardNumber"
=> does not workid="cardNumber"
, id="creditCardNumber"
, id="creditCardMonth"
, id="creditCardYear"
=> worksSince the name
attribute drives form data and might impact the way server-side form processing works I highly recommend triggering credit card scan by setting your input id
to cardNumber
.
I would link to the relevant documentation...but hey! There's none (at least, not that I know of)