Cordova InAppBrowser отправьте форму для URL

я пытаюсь опубликовать значения в appbrowser, но безуспешно. он открывает браузер дважды и данные не публикуются.

   var options = {
        email: '[email protected]',
        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();
    }

Ответы на вопрос(4)

ованием dataUrl:

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"
);
 Jannis25 апр. 2018 г., 08:44
@SunilRawat: вы пробовали примеры для плагина InAppBrowser из его документации? Они работают или это общая проблема с плагином и вашим устройством / приложением?
 Sunil Rawat25 апр. 2018 г., 06:52
Я пытаюсь использовать приведенный выше код, но он не работает, браузер не открывается на моем устройстве.
 Jannis27 нояб. 2017 г., 09:35
Это для кодирования данных с использованием Base64:developer.mozilla.org/en-US/docs/Web/API/WindowBase64/...
 ram1239330 авг. 2019 г., 14:07
@ user94, можете ли вы сказать мне, вы используете ионный или любой другой?
 Sunil Rawat25 апр. 2018 г., 10:35
не могли бы вы помочь мне в этом. Я потратил много времени, чтобы найти решение, но безуспешно.
 Jannis20 авг. 2018 г., 14:50
Возможно, было бы лучше сформулировать ваш вопрос как новый вопрос о SO и связать его здесь
 ram1239327 июл. 2019 г., 11:42
работает отлично, спасибо большое!
 Sunil Rawat25 апр. 2018 г., 10:34
// Открываем как браузер на устройстве var openInAppBrowser = function (fields) {// alert (fields); alert («Запуск в устройстве ..»); // Размещаем все необходимые параметры в payu iabRef = window.open ('epayDevice.html', '_blank', 'location = no'); iabRef.addEventListener ('loadstart', function () {});
 Sunil Rawat25 апр. 2018 г., 10:34
Я попробовал это с плагином InAppBrowser, да из документа, который я пытаюсь, я просто хочу передать отдельные параметры из js в html, используя InappBrowser.
 Diluk Angelo28 сент. 2017 г., 07:48
что такое btoa ()?
 user9430 авг. 2019 г., 13:49
@ ram12393 не могли бы вы опубликовать решение?
 user9430 авг. 2019 г., 13:48
это не работает для меня. Как это сделать в приложении PhoneGap?

узки или событии запуска загрузки с помощью Execute Script.

Сначала связывайте события, когда открываете ссылку:

{
  var url= 'yourURL';
  if( device.platform === "Android"){
         ref =cordova.InAppBrowser.open(url, "_blank",'location=no,clearcache=yes,hardwareback=no,zoom=no');
  }else{
        ref =cordova.InAppBrowser.open(url, "_blank",'location=no,clearcache=yes,closebuttoncaption=Go back to App,toolbar=yes,presentationstyle=formsheet');
  }


  ref.addEventListener('loadstart',onBrowserLoadStart);
  ref.addEventListener('loadstop',onBrowserLoadStop);
  ref.addEventListener('loaderror', onBrowserError);
  ref.addEventListener('exit', onBrowserClose);
}

Затем на onBrowserLoadStop, проверьте правильность страницы для формы публикации:

function onBrowserLoadStop(event){


var cUrl= 'myformURL';
if(event.url===cUrl){

    var msg;
    var newHtml=YourFormHTML;
    var withoutScriptHtml = $(newHtml.bold());
    withoutScriptHtml.find('script').remove();


    msg=    " var formDiv = document.createElement('div'); formDiv.id='someFormDiv'; ";
    msg+=   " formDiv.innerHTML='" + withoutScriptHtml.html()+ "';" ;
    msg +=  " document.getElementById('outerDiv').appendChild(formDiv);"; //outerDiv should be on the html page residing at cUrl
    msg +=  " document.getElementById('yourFormName').submit();";
    //console.log("the message: "+ msg);


    ref.executeScript(
        {
            code: msg
        },
        function(values){
            console.log(JSON.stringify(values));
        }
    );


}
}

Вы можете сделать это так

var options = {
        email: '[email protected]',
        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();';

а затем выполните скрипт в inappbrowser, используя событие loadtop, как это

ref.addEventListener('loadstop', onLoadStopFunction);

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

    if (params[0] == null) {

        //error message
    }

}

Есть много других способов сделать это.

С 1 страницы:

window.localStorage.setItem('tempForm', JSON.stringify(form));
location.replace('page2.html');

2 страница:

var passedForm = $.parseJSON(window.localStorage.getItem('tempForm'));

Вы можете сделать это со всеми объектами.

Ваш ответ на вопрос