我需要将数据发布到外部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)
如何让这段代码生效?
编辑: 我还注意到有一个浏览器窗口打开然后几秒钟后自动关闭。在该窗口关闭后,另一个窗口打开。第二个窗口是有问题的。那个不响应后退按钮的那个。
答案 0 :(得分:0)
问题是form.target不能与InAppBrowser一起使用,因此当您提交表单时,webview将重定向到表单的网址。您可以通过多种方式向外部端点发送 POST 请求。
var req = new WLResourceRequest('http://yourendpoint.com/', WLResourceRequest.POST); req.send({data:'your data object'})
; 话虽这么说,如果您想使用InAppBrowser提交表单并向某个端点发送 POST 请求,您需要执行以下操作。
<!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>
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的行为与浏览器窗口非常相似。