cordova InAppBrowser 不适用于 _system 参数
cordova InAppBrowser does not work with _system param
我正在尝试使用 cordova InAppBrowser 打开支付页面,我想在移动设备的系统浏览器中打开该页面。我也在尝试 _blank 参数,但 _blank 只是在同一个 window 中打开那个页面到应用程序。我还想通过 Cordova InAppBrowser 发送 Post 请求。这是我的代码:
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只是在同一个window中打开页面到应用程序。在设备的系统浏览器中打开支付页面应该怎么做?
我发现你有两个问题(如果有更多,请说明,以便我更新答案):
如何post数据到带有_system配置的inappbrowser。
- 第一部分,你可以试试this answer。在此解决方案中,您将打开一个包含其 html 中数据的页面,然后调用其提交事件(使用表单上的 post 方法)将 post 数据发送到您想要的页面。
以及如何return从打开的页面到打开器应用程序。
- 第二个尝试使用 deeplinks。例如使用 this plugin。使用 deeplinks,您的应用程序将收到 URL 打开的广播。这样,从打开的页面重定向到包含 link 到 x 的页面,并将 x 设置为 deeplink 到您的应用程序页面。我认为 deeplinks 不适用于所有移动设备,但我认为这是目前唯一的方法。
我终于在这个 branch 原始 InAppBrowser 存储库中找到了解决方案。
有同样问题的朋友看看openExternal
这个分支的功能。它允许像外部文件一样打开数据 link.
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();
}
}
使用上面的功能后,一切正常
我正在尝试使用 cordova InAppBrowser 打开支付页面,我想在移动设备的系统浏览器中打开该页面。我也在尝试 _blank 参数,但 _blank 只是在同一个 window 中打开那个页面到应用程序。我还想通过 Cordova InAppBrowser 发送 Post 请求。这是我的代码:
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只是在同一个window中打开页面到应用程序。在设备的系统浏览器中打开支付页面应该怎么做?
我发现你有两个问题(如果有更多,请说明,以便我更新答案):
如何post数据到带有_system配置的inappbrowser。
- 第一部分,你可以试试this answer。在此解决方案中,您将打开一个包含其 html 中数据的页面,然后调用其提交事件(使用表单上的 post 方法)将 post 数据发送到您想要的页面。
以及如何return从打开的页面到打开器应用程序。
- 第二个尝试使用 deeplinks。例如使用 this plugin。使用 deeplinks,您的应用程序将收到 URL 打开的广播。这样,从打开的页面重定向到包含 link 到 x 的页面,并将 x 设置为 deeplink 到您的应用程序页面。我认为 deeplinks 不适用于所有移动设备,但我认为这是目前唯一的方法。
我终于在这个 branch 原始 InAppBrowser 存储库中找到了解决方案。
有同样问题的朋友看看openExternal
这个分支的功能。它允许像外部文件一样打开数据 link.
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();
}
}
使用上面的功能后,一切正常