当前位置: 首页 > 知识库问答 >
问题:

IONIC 2 InAppBrowser在IOS中不工作

王才英
2023-03-14

以下代码在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-html" target="_blank">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”

    请帮助我们解决此问题。。。

    谢谢

  • 共有1个答案

    暴德运
    2023-03-14

    我解决了这个问题。

    <代码>浏览器。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")
            }
          }
          )}
    

    我不知道为什么那里不管用。如果有人知道,请回答。

    谢谢

     类似资料:
    • 我使用一个包在Flutter中,它可以在Android上正常工作,但是当在ios模拟器上运行我的项目时,我在控制台中收到错误。 当我运行时,我得到以下错误,由于内容长度,我删除了错误的一些重复部分。 我在上面的错误中找不到任何相关消息这是 这就是我与pusher的连接方式 但在我注释掉上述文件和<code>pusher_client:^2.0.0<code>中的<code>时。yaml然后运行<c

    • 您可以看到,我的JSON中有两个块:一个通知块(在后台接收通知),一个数据块(在前台接收通知)。 我不明白为什么没有收到后台通知。我的怀疑是关于块的顺序(如果我把“数据”块放在“通知”块之前会有问题吗?)。 编辑:有关问题的更多信息。 编辑2: 当应用程序在后台时,不会收到通知,但当我打开应用程序时,会立即收到相同的通知(方法didReceiveRemoteNotification被激发)。

    • 我在iOS ;7上运行良好的应用程序不能在iOS ;8 SDK上运行。 没有返回位置,而且我也没有在“设置”->“位置服务”下看到我的应用程序。我在谷歌上搜索了这个问题,但什么也没有找到。会有什么问题吗?

    • 绘制线条在iOS14上不起作用。 我创建了的子类。 我想在自定义单元格中画两条线。 代码在下面。 它在iOS 12上运行良好。它在iOS 14上不起作用。(不知道在iOS 13上是否管用)。 我不知道我能做些什么来解决这个问题。 你知道原因吗?你能修好它吗?

    • 我尝试了以下各种组合: 在ap有效载荷中传递了一个空警报 一个空的声音通过ap有效载荷 content_available:真 内容可用: 1 优先级设置为高。我的目标功能在后台模式中启用了后台抓取和远程通知。 这是我的有效载荷的样子: 我一打开应用程序,通知就会进来,但不是在后台。 看起来是这样的: [AnyHasable("body"): NTCIP示例单元:现在显示WALNUT TREE(T

    • 一旦我调整了应用程序图标的大小,我试图重新运行应用程序,我得到了这个错误,模拟器不会启动。我在Android模拟器上试了一下,效果不错。不确定我做错了什么。 来自油库:[✓] Flutter(Channel stable,v1.9.1 hotfix.6,在Mac OS X 10.15.1 19B88上,语言环境 恩-美国) [✓] Android工具链 - 针对Android设备开发(Androi