以下代码在Android中运行良好。但是,它在IOS中不起作用。
我们认为是浏览器。executeScript在此不工作。在这里,我们从API获取重定向url作为html内容(this.paymentGatewayDetails),我们需要打开它。它在android中运行良好。
>
在IOS 11.0手机中尝试此操作。
离子2.2版
插件@ionic native/应用内浏览器“^4.3.2”
这就是我们正在尝试执行的函数。
callGateway() {
return new Promise(
(resolve, reject) => {
let injected = false;
if (!this.paymentGatewayDetails) {
reject("PG_DET_INVALID")
}
const browser = this.iab.create("about:blank", "_blank", "location=no");
browser.show()
//inject html code to blank page. one time
browser.on("loadstop")
.subscribe(
(sucess) => {
if (!injected) {
browser.executeScript({ code: "document.write('" + this.paymentGatewayDetails + "');" }).then(
(sucess) => {
console.log("sucess");
browser.executeScript({ code: "document.mypg.submit();" }).then(
(sucess) => {
console.log("sucess redirection");
}, (err) => {
console.log("error redirection");
}
);
}, (err) => {
console.log("err")
}
);
injected = true;
}
console.log("success url is", sucess.url);
if (sucess.url.includes("mobile.mypg.com")) {
//payment gateway call sucess.
browser.close()
resolve("PG_CALL_SUCC")
}
}
)}
我们在PLIST文件中给出了
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
和在索引中。html
<meta http-equiv="Content-Security-Policy" content="default-src gap://ready file://* *; script-src 'self' 'unsafe-inline' 'unsafe-eval' *; style-src 'self' 'unsafe-inline';”>
我们还安装了白名单插件
cordova插件白名单
在配置中。xml还添加了这些行
<content src="index.html" />
<access origin="*" subdomains="true" />
<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
<allow-navigation href="data:*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
cordova插件ls
com.darktalker.cordova.screenshot0.1.5"截图"
科尔多瓦-插件-动作表2.3.3“动作表”
cordova插件compat 1.1.0“compat”
cordova插件控制台1.0.5“控制台”
cordova插件设备1.1.4“设备”
科尔多瓦插件对话框1.3.3“通知”
cordova插件fcm 2.1.2“FCMPlugin”
cordova插件地理位置2.4.3“地理位置”
cordova插件全球化1.0.7“全球化”
cordova插件热线1.2.1“Phonegap热线插件”
cordova插件inappbrowser 1.7.1“inappbrowser”
cordova插件mfp 8.0.2017072706“IBM MobileFirst Platform Foundation”
Cordoa-plugin-mfp-jsonstore8.0.2017081712"IBMMobileFirst Platform Foundation JSONStore"
cordova插件nativestorage 2.2.2“nativestorage”
Cordoa-plugin-okhttp 2.0.0“OkHttp”
cordova插件屏幕方向2.0.1“屏幕方向”
cordova插件sms 1.0.5“sms”
科尔多瓦-插件-飞屏4.0.3“飞屏”
科尔多瓦-插件-状态栏2.2.2“状态栏”
cordova插件白名单1.3.1“白名单”
cordova-plugin-x-socialsharing 5.1.8“社交共享”
科尔多瓦。插件。诊断3.6.6“诊断”
es6 promise插件4.1.0“promise”
爱奥尼亚插件键盘2.2.1“键盘”
英国。co.workingedge公司。phonegap。插件。launchnavigator 4.0.4“launchnavigator”
请帮助我们解决此问题。。。
谢谢
我解决了这个问题。
<代码>浏览器。executeScript({代码:“document.write(“'this.paymentGatewayDetails””);“})代码>适用于IOS和Android
在这里,我删除了。然后((成功)=
现在,新代码可以在IOS和Android上运行
callGateway() {
return new Promise(
(resolve, reject) => {
let injected = false;
if (!this.paymentGatewayDetails) {
reject("PG_DET_INVALID")
}
const browser = this.iab.create("about:blank", "_blank", "location=no");
browser.show()
//inject html code to blank page. one time
browser.on("loadstop")
.subscribe(
(sucess) => {
if (!injected) {
browser.executeScript({ code: "document.write('" + this.paymentGatewayDetails + "');" });
console.log("sucess");
browser.executeScript({ code: "document.mypg.submit();" }).then(
(sucess) => {
console.log("sucess redirection");
}, (err) => {
console.log("error redirection");
}
);
injected = true;
}
console.log("success url is", sucess.url);
if (sucess.url.includes("mobile.mypg.com")) {
//payment gateway call sucess.
browser.close()
resolve("PG_CALL_SUCC")
}
}
)}
我不知道为什么那里不管用。如果有人知道,请回答。
谢谢