Когда в iOS8 Safari доступна опция "Сканировать кредитную карту"?

Поэтому Safari предлагает функцию сканирования кредитных карт на iOS8 с некоторыми формами кредитных карт.

У меня вопрос: как Safari определяет, когда предлагать эту опцию?

До сих пор я обнаружил, что эта опция доступна в Amazon и PayPal, но ни одна из моих форм ввода с кредитной карты не смогла воспроизвести это поведение.

Сканирование активации кредитной карты в форме

9 ответов

Решение

После небольшого исследования с браузером iOS8 и эмуляцией Chrome я понял это частично. Я знаю о некоторых решениях, но я точно не знаю, есть ли другие способы сделать это. Вы должны будете поблагодарить Apple за удивительное отсутствие документации по этому вопросу.

В настоящее время в Netflix/Amazon сканирование кредитных карт работает правильно. Поэтому я эмулировал пользовательский агент iOS8 в своем браузере Chrome и проверил разметку в поле номера их кредитной карты. Вот Netflix's:

<input name="cardNumber" smopname="num" id="cardNumber-CC" class="cardNumber" type="text" value="************0891" pattern="[0-9]*">

А вот и Амазонка:

<input name="addCreditCardNumber" size="20" maxlength="20">

В этот момент я поиграл с формой, обслуживаемой через HTTPS, которую я контролировал, и начал устанавливать атрибуты, чтобы увидеть, что произойдет. Ниже "работает" означает "успешно запущено сканирование карты", а "не работает" означает " не инициировано сканирование карты":

  • name="addCreditCardNumber" => работает
  • name="cardNumber" => работает
  • name="cardnumber" => работает
  • class="cardNumber" => не работает
  • type="cardNumber" => не работает
  • id="cardNumber", id="creditCardNumber", id="creditCardMonth", id="creditCardYear" => работает

Так как name Атрибут управляет данными формы и может повлиять на работу серверной формы. Я настоятельно рекомендую запустить сканирование кредитной карты, указав свой ввод id в cardNumber,

Я бы дал ссылку на соответствующую документацию... но эй! Там нет (по крайней мере, не то, что я знаю)

Я думаю, что вам лучше использовать HTML5 Autocomplete Types на ваших входах.

Придерживайтесь типов, связанных с кредитной картой, и большинство современных браузеров автоматически распознают эти поля, включая Mobile Safari и функцию "Сканировать кредитную карту". Бонус в том, что вы всегда получите правильную клавиатуру и на мобильных устройствах.

Пример (примечание autocomplete, x-autocompletetype, а также pattern атрибуты):

<input type="text" id="cc-num" autocomplete="cc-number" x-autocompletetype="cc-number" pattern="\d*">

<input type="text" id="cc-name" autocomplete="cc-name" x-autocompletetype="cc-full-name">

Я также написал соответствующее сообщение в блоге на эту тему и создал HTML5 Autocomplete Cheatsheet.

В дополнение к ответу Арно Брусо, поиск "номера карты" в файлах симулятора iOS дает следующий файл:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/SafariShared.framework/SafariShared

Быстрый пробег strings на нем показаны эти строки, которые, безусловно, используются для сопоставления потенциальных полей:

card number
cardnumber
cardnum
ccnum
ccnumber
cc num
creditcardnumber
credit card number
newcreditcardnumber
new credit card
creditcardno
credit card no
card#
card #
cvc2
cvv2
ccv2
security code
card verification
name on credit card
name on card
nameoncard
cardholder
card holder
name des karteninhabers
card type
cardtype
cc type
cctype
payment type
expiration date
expirationdate
expdate

и чуть дальше:

month
date m
date mo
year
date y
date yr

Не могу увидеть (при таком наивном подходе) какие-либо ссылки на какие атрибуты (id, name, placeholder...) или другие метаданные (возможно, метка?) сравниваются с этим списком. Кроме того, за исключением "name des karteninhabers", оно действительно очень ориентировано на английский, что довольно необычно для Apple IMHO.

Благодаря @barbazoo, опция Сканировать кредитную карту будет доступна через https с действующим (не самоподписанным) сертификатом.

Для полей срока действия, основываясь на ответе Арно, я обнаружил, что поля срока действия будут распознаваться по cardExpirationYear а также cardExpirationMonth быть в id приписывать.

Это сработало, когда год и месяц являются обычными текстовыми вводами с соответствующими идентификаторами. Месяц заполняется как двузначное число, а год - как четырехзначное число.

В быстром тесте с использованием тегов