cordova InAppBrowser不适用于_system参数

问题描述 投票:7回答:3

我正在尝试使用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只需在与应用相同的窗口中打开页面。在设备的系统浏览器中打开付款页面该怎么办?

javascript android cordova inappbrowser
3个回答
4
投票

最后,我在原始InAppBrowser存储库的branch中找到了解决方案。

有相同问题的任何人都可以查看此分支的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();
    }
}

使用上述功能后,一切正常。


1
投票

我发现您有两个问题(如果还有更多问题,请解释一下,以便我更新答案):

  1. 如何使用_system配置将数据发布到不兼容的浏览器。

    • 对于第一部分,您可以尝试this answer。在此解决方案中,您将打开一个包含html中数据的页面,然后调用其Submit事件(使用窗体上的post方法)以将数据发布到所需的页面。
  2. 以及如何从打开的页面返回到打开程序应用程序。

    • 第二个尝试使用深层链接。例如,使用this plugin。使用深层链接,您的应用程序将收到URL打开的广播。这样一来,从打开的页面重定向到包含x链接的页面,并将x设置为您的应用页面的深层链接。我认为深层链接无法在所有移动设备上正常运行,但我认为这是目前的唯一方法。

0
投票

我想根据omid nematollahi的最终答案发表评论,但我没有足够的声誉来发表评论。

我有相同的相同问题,试图打开带有POST内容的HTML代码(带有表单),并且需要使用系统浏览器打开此代码。如果我尝试使用_blank参数,则一切正常。切换到_system时,它将不会打开任何内容。

我试图以多种方式使用openExternal()函数,但似乎无法正常工作,您能否在与最初问题完全相同的情况下举一个代码解决方案的示例?

非常感谢。

© www.soinside.com 2019 - 2024. All rights reserved.