我有一个包含表单的页面。表单通过Javascript调用提交,并通过设置为“_blank”的目标打开一个新窗口。
<div id="ajax_response_html">
<form name="testform_name" id="testform_id" method="post" target="_blank" action="index.jsp" accept-charset="UTF-8" />
<input type="hidden" name="textbox_name" id="textbox_id" value="test" />
</form>
</div>
在onclick事件中,使用ajax调用在上面的div中设置表单。那时,我用JavaScript提交表单。
function setResponse() {
var response = http.responseText;
document.getElementById("ajax_response_html").innerHTML = response;
document.getElementById("testform_id").submit();
}
新窗口打开,工作正常。但是,我有一个使用webview的移动应用程序 - 应用程序内的浏览器会话 - 并且它不会打开新窗口。目前,我无法控制应用程序,也无法访问其源代码。我唯一的办法是修改页面以安抚应用和非应用用户。对于前者,它将在同一窗口中打开。对于后者,它将打开一个新窗口。那是计划。
我的思维过程是检测新窗口是否已打开。如果没有,那么我在同一个窗口打开它。
if (!windowOpen) {
// Open page in the same window
}
如何在提交表单后检测新窗口是否已打开?
谢谢。
更新
我与该应用程序的开发人员交谈,他说他的弹出窗口禁用,不会很快改变。
我修改了页面,不是通过ajax调用html表单文件,而是使用JavaScript window.open函数打开同一个文件:
function openForm() {
var formWindow = window.open('FormFile.html', '_blank', 'height=' + screen.height + ', width=' + screen.width');
}
在FormFile.html中,我附加了一个提交表单的onload事件,但目标设置为“_self”,而不是“_blank”。
现在,它会在应用内的同一窗口中打开,并在其他任何地方打开一个新窗口。我的问题是,由于弹出窗口在应用程序中被禁用,为什么window.open会工作,但我用来提交表单的原始方法是否失败?
答案 0 :(得分:1)
我的建议是事先检查用户是否正在使用该应用程序,然后根据该行为修改行为,而不是检查是否打开了新窗口。我过去通过检查screen.width
属性(可以在CSS中完成)来完成此操作,但是你可以更干净地完成它(由this post's回答):
if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
// some code..
}
这更干净,因为您可以在加载时确定是否需要在当前窗口或新窗口中打开,而不是稍后对用户发生的事情做出反应。