我正在使用离子创建一个商店网站,该网站实用了以标准方式工作的外部支付提供商(以 iframe 运行并将您重定向回原始页面,一旦付款成功)。
当Ionic在本地运行网站时,您无法重定向回URL,因为每个网址都不同。
我想我不是第一个遇到这个问题的人。
如何从我的应用内的iframe内的付款服务提供商重定向回我的某个离子状态?
答案 0 :(得分:0)
您可以使用此插件为您的应用制作自定义网址方案:https://github.com/EddyVerbruggen/Custom-URL-scheme
祝你好运!答案 1 :(得分:0)
所以你真的不应该在一个cordova应用程序中使用iframe。他们提供非常糟糕的用户体验。更好的选择是使用应用内浏览器
答案 2 :(得分:0)
就我而言,我在主视图中添加侦听器,等待来自iframe的消息:
window.addEventListener('message', this.receiveMessage, false);
在iframe中,我向父窗口发送消息:
parent.postMessage("stateToGo", "*");
然后,调用父窗口的回调方法:
receiveMessage = (state) => {
this.$state.go(state);
}
答案 3 :(得分:0)
我使用inAppBrowser在我的一个应用程序中实现了类似的功能。您可以通过以下方式实现此目的:
以下代码段可以帮助您了解该方法:
var ref = $window.open(order.payment_url, '_blank', 'location=no,hardwareback=no'), processed = false; ref.addEventListener('loadstop', function (event) { if (event.url === payment_result_url) { ref.executeScript({ code: "document.body.innerHTML" }, function (result) { try { var response = JSON.parse(result[0].replace(/\\/g, "")); // Process payment result here } catch (ex) { // JSON parsing error } processed = true; ref.close(); }); } }); ref.addEventListener('loaderror', function () { processed = true; ref.close(); // Network error }); ref.addEventListener('exit', function () { if (!processed) { // Payment cancelled } });