Stripe в wkwebview открывает скрипт загрузки страницы браузера

#ios #ionic-framework #stripe-payments #wkwebview #cordova-ios

#iOS #ionic-framework #stripe-платежи #wkwebview #кордова-ios

Вопрос:

мы переходим с нашим приложением на новый wkweview из-за требований Apple.

Одно из приложений использует StripeJS sdk, чтобы разрешить оплату в приложении. Проблема возникает, когда приложение загружается, а stripe SDK включен со следующим кодом:

 // Payment service is not initialized yet
      $.ajax({
        type: "GET",
        cache: true,
        url: "https://js.stripe.com/v3/",
        dataType: "script",
        error: function(XMLHttpRequest, textStatus, errorThrown) {
          Logger.error("An error ocurred during SDK download");
          def.reject();
        },
        success: function() {
          Logger.debug("Stipe JDK downloaded correctly");
          initialized = true;
          def.resolve();
        }
      });
  

Мы уже пытались использовать » тег head в index.html или динамически создает один ТЕГ скрипта и добавляет его к телу: но никто не устраняет проблему.

Тесты включения скрипта

[Метод Angular $http]

 $http({
   method: "GET",
   url: "https://js.stripe.com/v3/"
}).then(
   function(res) {
      angular.element("body").append("<script>"   res.data   "</script>");
   }, function(err) {
      def.reject();
   });
  

[index.html ]

 <html>
  <head>
     <script type="text/javascript" src="https://js.stripe.com/v3/"></script>
  ...
  

Проблема

Открывается страница браузера, и приложение остается в фоновом режиме; более конкретно, случай «METRICS_CONTROLLER» находится в переключателе в строке 767 (см. Библиотеку по URL < https://js.stripe.com/v3 / > ).

У кого-нибудь есть идея, почему, включая этот скрипт, открывается страница браузера?

Комментарии:

1. Вы пытаетесь загрузить Stripe.js из локальной кэшированной копии с использованием этого метода? Это не сработает, поскольку Stripe.js всегда должен включаться напрямую с серверов Stripe.

2. Приведенный выше метод является лишь примером — тег head или способ загрузки angular $ http не кэшируются, но проблема сохраняется:(

3. Если это пример, можете ли вы предоставить точный код, который вы используете для включения Stripe.js ? Он всегда должен включаться непосредственно с сайта Stripe, а не загружаться локально (к чему, похоже, приводит этот пример).

4. Спасибо taintedzodiac за ответ. Я редактирую сообщение, добавляя скрипт, добавляя тест. Саймон

5. Я также переместил приложение Ionic 3 на Ionic 4, и возникла проблема. Я также попытался динамически вставить скрипт, и страница открывается. Даже после возврата в приложение, если вы попытаетесь произвести платеж, это снова откроет новые страницы. Служба поддержки Stripe заявила, что они активно не поддерживают интеграцию с cordova. Мое решение состояло в том, чтобы создать форму кредитной карты в приложении и управлять всем процессом stripe (назначение платежа, способ оплаты, подписка …) в моем серверной части

Ответ №1:

просто чтобы ответить на мой вопрос, мы обнаружили проблему.

Проблема заключалась в разрешении навигации по URL, не разрешенному конфигурацией cordova ( файл ‘config.xml ‘ ). Более конкретно, нам нужно добавить следующую строку в нашу конфигурацию. файл

 <allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
  

Итак, наконец, наше определение разрешения CORS:

 <access origin="*" />
<allow-intent href="sms:*" />
<allow-intent href="tel:*" />
<allow-intent href="geo:*" />
<allow-intent href="mailto:*" />
<allow-intent href="file://*/*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
  

‘*’ связано с тем, что приложение может запускать внешний ресурс, поэтому мы не можем знать, какой URL-адрес будет открыт пользователем в приложении.

Надеюсь, это поможет @saperlipopette Саймон