在应用程序浏览器中不关闭

时间:2016-05-11 07:35:05

标签: javascript android cordova inappbrowser

我需要将数据发布到外部URL。我尝试使用应用内浏览器,这是我的代码:

var form = document.createElement('form');
form.action = "https://problematic.com/action/page.jsp";
form.method = 'POST';
//form.target = '_system';
form.target = 'NewFile';
form.style.display = 'none';

var inputCurrency = document.createElement('input');
inputCurrency.type = 'hidden';
inputCurrency.name = 'CURRENCYCODE';
inputCurrency.value = 'IDR';
form.appendChild(inputCurrency);

var inputCustEmail = document.createElement('input');
inputCustEmail.type = 'hidden';
inputCustEmail.name = 'CUSTEMAIL';
inputCustEmail.value = 'customer@gmail.com';
form.appendChild(inputCustEmail);

var inputReturnUrl = document.createElement('input');
inputReturnUrl.type = 'hidden';
inputReturnUrl.name = 'RETURN_URL';
inputReturnUrl.value = 'https://my.return.url.com/please-help-me';
form.appendChild(inputReturnUrl);

var submit = document.createElement('input');
submit.type = 'submit';
submit.id = 'submitProject';
form.appendChild(submit);

window.open("about:blank", "NewFile", "location=yes");
document.body.appendChild(form);
form.submit();

数据已发布到网址,结果网址显示为预期干净。但我无法关闭浏览器并返回我的应用程序。没有浏览器面板(如地址输入栏,停止,刷新,主页或退出)。只有页面。后退按钮也没有效果。按下后退按钮时,它显示:

  

05-11 14:24:16.690:I / chromium(6938):[INFO:CONSOLE(1)]" Uncaught   ReferenceError:未定义cordova",source:(1)

如何让这段代码生效?

编辑: 我还注意到有一个浏览器窗口打开然后几秒钟后自动关闭。在该窗口关闭后,另一个窗口打开。第二个窗口是有问题的。那个不响应后退按钮的那个。

1 个答案:

答案 0 :(得分:0)

问题是form.target不能与InAppBrowser一起使用,因此当您提交表单时,webview将重定向到表单的网址。您可以通过多种方式向外部端点发送 POST 请求。

  1. 您可以使用适配器充当代理
  2. 您可以使用WLResourceRequest,即var req = new WLResourceRequest('http://yourendpoint.com/', WLResourceRequest.POST); req.send({data:'your data object'});
  3. 表格或任何ajax功能/库
  4. 话虽这么说,如果您想使用InAppBrowser提交表单并向某个端点发送 POST 请求,您需要执行以下操作。

    1. 为您的应用创建另一个html文件,即 form.html 。这是您将构建表单并使用从主视图传入的数据填充的文件
    2. <!DOCTYPE HTML>
      <html>
        <head>
          <meta charset="UTF-8">
          <title>SubmitForm</title>
        </head>
        <body>
          loading screen, spinner, etc...
          <script>
            function sendFormData(data) {
              // create your form in the DOM, populate with the data object and submit
            }
          </script>    
        </body>
      </html>
      
      1. 从主视图或javascript文件中打开InAppBrowser,其位置设置为 form.html
      2. var win = window.open( "form.html", "_blank", "location=yes" );
        
        win.addEventListener( "loadstop", function() {
            win.executeScript({ code: "sendFormData(" + JSON.stringify({form:'data',other:'more form data...'}) + ");" });
        });
        

        使用 location = yes ,它将有一个关闭按钮,以便用户可以关闭InAppBrowser并返回主视图。

        PS:为什么iframe方法不起作用? iframe的行为与浏览器窗口非常相似。