我想向 外部网址 提交结帐 表单,该表单应打开带有结果的新窗口
,但是我无法使我的应用程序打开它,也无法在单独的窗口中打开它,也无法使用应用程序内浏览器。
到目前为止,我要做的是创建一个内部形式的指令,并通过链接器函数在某个时候调用Submit元素。
当我在浏览器中运行时,这会打开一个新窗口(就像我想要的一样)。 这个问题 时,会出现 在设备上运行 ,因为它只是 REPLACES
的 内容 我有新的内容视图 ,而无需打开 一个 对外的窗口 。
因此,问题是…在设备上运行时,如何发布此表单以打开新窗口(导航器)或应用内浏览器,并在那里显示结果?
谢谢!!
好吧,要弄清楚它很复杂,但是最后解决方案很“简单”。我将其张贴在这里,以帮助遇到相同问题的其他任何人。如果有人有更优雅的解决方案,它将受到欢迎。
我结束的工作是:
这是代码(请注意,我正在使用带有格式的指令,因此我可以控制何时从链接函数提交它,并且数据通过服务与该指令共享):
angular.module('starter', ['ionic'])
.constant('cartData', {
redirectUrl: 'https://test.mycart.com/hpp/pay.shtml',
redirectMethod: 'POST',
redirectData: {
'formParam1': 'value1',
'formPara2': 'value2'
}
}
)
.controller('InitCtrl', function($cordovaInAppBrowser, $scope, cartData) {
$scope.openView = function(){
var counter = 0;
if(ionic.Platform.isWebView()){
$ionicPlatform.ready(function() {
//this is the cordova in app web view
var ref = $cordovaInAppBrowser.open('payment.html', '_blank', {location:'yes'});
$rootScope.$on('$cordovaInAppBrowser:loadstop', function(e, event){
if(counter < 1){
//prevent the callback to be called several times
$cordovaInAppBrowser.executeScript({
code: 'window.paymentCallback('+ angular.toJson(cartData) +');'
});
counter++;
}
});
});
}
};
})
//and then in payment.js
window.paymentCallback = null;
angular.module('payment', [])
.directive('autoSubmitForm', ['$timeout', 'autoSubmitFormDelegate', function($timeout, autoSubmitFormDelegate) {
return {
replace: true,
scope: {},
template: '<form action="{{formData.redirectUrl}}" method="{{formData.redirectMethod}}">'+
'<div ng-repeat="(key,val) in formData.redirectData">'+
'<input type="hidden" name="{{key}}" value="{{val}}" />'+
'</div>'+
'</form>',
link: function($scope, element, $attrs) {
autoSubmitFormDelegate.submitCallback = function(data) {
$scope.formData = data;
$timeout(function() {
element[0].submit();
});
};
}
}
}])
.factory('autoSubmitFormDelegate', function(){
var delegate = {};
delegate.submitCallback = null;
delegate.submitForm = function(data){
if(delegate.submitCallback){
delegate.submitCallback(data);
}
}
return delegate;
})
.controller('PaymentCtrl', function($scope, $timeout, $window, $sce, autoSubmitFormDelegate){
$window.paymentCallback = function(data){
console.log("callback called");
data.redirectUrl = $sce.trustAsResourceUrl(data.redirectUrl);
$timeout(function(){
autoSubmitFormDelegate.submitForm(data);
});
};
})
<link href="http://code.ionicframework.com/1.1.1/css/ionic.min.css" rel="stylesheet">
<script src="http://code.ionicframework.com/1.1.1/js/ionic.bundle.min.js"></script>
<body ng-app="starter">
<ion-view view-title="Init">
<ion-content>
<h1>Init</h1>
<button class="button button-positive" ng-click="openView()">Open new view</button>
</ion-content>
</ion-view>
</body>
<script type="text/ng-template" id="payment.html">
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
<title></title>
<script src="../lib/angular/angular.min.js"></script>
<script src="../js/payment.js"></script>
</head>
<body ng-app="payment" ng-controller="PaymentCtrl">
<auto-submit-form></auto-submit-form>
</body>
</html>
</script>
以下代码在Android中运行良好。但是,它在IOS中不起作用。 我们认为是浏览器。executeScript在此不工作。在这里,我们从API获取重定向url作为html内容(this.paymentGatewayDetails),我们需要打开它。它在android中运行良好。 > 在IOS 11.0手机中尝试此操作。 离子2.2版 插件@ionic native/应用内浏览器“^4.3.2” 这
主要内容:$ionicModal,ionicModal,实例$ionicModal $ionicModal 可以遮住用户主界面的内容框。 你可以在你的 index 文件或者是其他文件内嵌入以下代码(里面的代码可以根据你自己的业务场景相应的改变)。 然后你就可以在你的 Controller 里面的注入 $ionicModal 。然后调用你刚刚写入的模板,进行初始化操作。就像下面的代码: 方法 参数 类型 详情 templateString 模板的字符串作为模
$ionicModal $ionicModal 可以遮住用户主界面的内容框。 你可以在你的 index 文件或者是其他文件内嵌入以下代码(里面的代码可以根据你自己的业务场景相应的改变)。 <script id="my-modal.html" type="text/ng-template"> <ion-modal-view> <ion-header-bar> <h1>My
问题内容: 我的应用程序中的一个页面具有一组链接,这些链接在单击时会基于TableTools jQuery插件发布表单数据。我想在一个新窗口中打开这个新页面。关于最佳方法的任何想法?我宁愿不将所有操作链接都更改为单个表单和用法。我尝试过调用一个新窗口以成功打开,然后将数据写入此页面,但这没有用。请帮忙! HTML: Javascript: 问题答案: 找到了答案: jQuery.ajax成功回调函
phonegap/cordova的文档非常糟糕。我只想在Windows环境中安装PhoneGap 3.0,但没有成功。 下面是我的步骤和失败点。有人能就解决方案提出建议吗? 根据说明: 安装Node.js(成功) 从nodes.js:(SUCCESSFUL) 添加平台:(什么都没发生) 尝试phonegap:(找不到ERROR项目目录) 来自“Windows Phone 8平台指南” 安装Wind
测试:测试 用户代理:Mozilla/5.0(Linux;Android 4.4.2;SCH-I535 Build/KOT49h)AppleWebKit/537.36(KHTML,like Gecko)版本/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 查询字符串参数client_id=XXX-OH7O4CMAJU3JGPRLLLN97NF0P3PC1F91.a