Cordova InAppBrowser将表单发布到url

mem*_*emo 5 javascript post angularjs cordova inappbrowser

我试图发布值inappbrowser但没有成功.它确实打开浏览器两次,没有发布数据.

   var options = {
        email: 'test@email.com',
        item_id: 1234,
        reference: 1234,
        item_descr: 'description',
        item_quant: 1,
        item_valor: 50 * 100
    };
    var form = document.createElement("form");
    var url = "https://testurl.com";
    form.setAttribute("method","post");
    form.setAttribute("action",url);
    for (var data in options) {
      var hiddenField = document.createElement("input");
      hiddenField.setAttribute("type", "hidden");
      hiddenField.setAttribute("name", data);
      hiddenField.setAttribute("value", options[data]);
      form.appendChild(hiddenField);
    }
    document.body.appendChild(form);
    var ref = cordova.InAppBrowser.open(url, '_blank', 'location=yes');
    if(ref){
      form.submit();
    }
Run Code Online (Sandbox Code Playgroud)

Jan*_*nis 17

这是使用dataUrl通过InAppBrowser发布HTML表单的另一种方法:

var pageContent = '<html><head></head><body><form id="loginForm" action="YourPostURL" method="post">' +
'<input type="hidden" name="key1" value="' + YourValue1 + '">' +
'<input type="hidden" name="key" value="' + YourValue2 + '">' +
'</form> <script type="text/javascript">document.getElementById("loginForm").submit();</script></body></html>';
var pageContentUrl = 'data:text/html;base64,' + btoa(pageContent);

var browserRef = window.cordova.InAppBrowser.open(
    pageContentUrl ,
    "_blank",
    "hidden=no,location=no,clearsessioncache=yes,clearcache=yes"
);
Run Code Online (Sandbox Code Playgroud)


tan*_*dar 8

你可以这样做

var options = {
        email: 'test@email.com',
        item_id: 1234,
        reference: 1234,
        item_descr: 'description',
        item_quant: 1,
        item_valor: 50 * 100
    };

    var script = 'var form = document.createElement("form");';
     script += 'var url = "https://testurl.com";';
     script += 'form.method="post"';
     script += 'form.setAttribute("action",url);';
    for (var data in options) {
      script += 'var hiddenField = document.createElement("input");';
      script += 'hiddenField.setAttribute("type", "hidden");';
      script += 'hiddenField.setAttribute("name","' + data +'");';
      script += 'hiddenField.setAttribute("value","' + options[data] + '");';
      script += 'form.appendChild(hiddenField);';
    }
    script += 'document.body.appendChild(form)';
    var ref = cordova.InAppBrowser.open(url, '_blank', 'location=yes');
script += 'form.submit();';
Run Code Online (Sandbox Code Playgroud)

然后使用像这样的loadstop事件在inappbrowser中执行脚本

ref.addEventListener('loadstop', onLoadStopFunction);

onLoadStopFunction(params){
   ref.executeScript({ code: script }, executeScriptCallBack);
}
function executeScriptCallBack(params) {

    if (params[0] == null) {

        //error message
    }

}
Run Code Online (Sandbox Code Playgroud)

还有很多其他方法可以做到这一点.


men*_*ene -2

从第 1 页开始:

window.localStorage.setItem('tempForm', JSON.stringify(form));
location.replace('page2.html');
Run Code Online (Sandbox Code Playgroud)

2 页:

var passedForm = $.parseJSON(window.localStorage.getItem('tempForm'));
Run Code Online (Sandbox Code Playgroud)

您可以对所有对象执行此操作。