Cordova InAppBrowser не работает с параметром _system - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь открыть платежную страницу с помощью cordova InAppBrowser и хочу открыть эту страницу в системном браузере на мобильных устройствах.Я также пробую параметр _blank, но _blank просто откройте эту страницу в том же окне для приложения.И я также хочу отправить запрос по почте через Cordova InAppBrowser.это мой код:

    var redirect = 'https://SomeRef';

    var pageContent = '<form id="FormID" action="https://SomeOtherRefs" method="post">' +
      '<input type="hidden" name="RedirectURL" value="' + redirect + '">' +
      '<input type="hidden" name="Token" value="' + dataVar + '">' +
      '</form> <script type="text/javascript">document.getElementById("FormID").submit();</script>';
    var pageContentUrl = 'data:text/html;base64,' + btoa(pageContent);

    var browserRef = cordova.InAppBrowser.open(
      pageContentUrl,
      "_system",
      "hidden=no,location=no,clearsessioncache=yes,clearcache=yes"
    );

Никаких действий с этим параметром _system не происходит, и _blank просто открывает страницу в том же окне для приложения.Что мне делать, чтобы открыть страницу оплаты в системном браузере устройства?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Наконец-то я нашел решение в этой ветви оригинального репозитория InAppBrowser.

Любой, у кого такая же проблема, взглянет на функцию openExternal этой ветви.Это позволяет открывать данные как внешнюю ссылку.

public String openExternal(String url) {
    try {
        // Omitting the MIME type for file: URLs causes "No Activity found to handle Intent".
        // Adding the MIME type to http: URLs causes them to not be handled by the downloader.
        Uri uri = Uri.parse(url);
        String scheme = uri.getScheme();

        Intent intent = "data".equals(scheme)
                ? Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_BROWSER)
                : new Intent(Intent.ACTION_VIEW);

        if ("file".equals(scheme)) {
            intent.setDataAndType(uri, webView.getResourceApi().getMimeType(uri));
        } else {
            intent.setData(uri);
        }

        intent.putExtra(Browser.EXTRA_APPLICATION_ID, cordova.getActivity().getPackageName());
        this.cordova.getActivity().startActivity(intent);
        return "";
        // not catching FileUriExposedException explicitly because buildtools<24 doesn't know about it
    } catch (java.lang.RuntimeException e) {
        LOG.d(LOG_TAG, "InAppBrowser: Error loading url " + url + ":" + e.toString());
        return e.toString();
    }
}

После использования вышеуказанной функции все идет как надо.

0 голосов
/ 22 декабря 2018

Я обнаружил, что у вас есть две проблемы (если их больше, объясните их, чтобы я обновил ответ):

  1. Как отправить данные в браузер приложений с _systemconfig.

    • Для первой части вы можете попробовать этот ответ .В этом решении вы откроете страницу, содержащую данные в ее html, а затем вызовете событие отправки (используя метод post в форме), чтобы опубликовать данные на нужной странице.
  2. А как вернуться с открытой страницы, в приложение для открывания.

    • А для второй попробуйте использовать глубокие ссылки.Например, используя этот плагин .Используя глубокие ссылки, ваше приложение будет получать трансляции открытия URL.Чтобы с открытой страницы перенаправить на страницу, содержащую ссылку на x, и установить x в качестве ссылки на страницу вашего приложения.Я думаю, что Deeplinks не работает на всех мобильных устройствах, но я думаю, что это пока единственный путь.
...