如何检测是否已打开新窗口?该窗口通过提交目标=“_空白”打开

时间:2013-09-12 17:13:41

标签: javascript html forms tabs window

我有一个包含表单的页面。表单通过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会工作,但我用来提交表单的原始方法是否失败?

1 个答案:

答案 0 :(得分:1)

我的建议是事先检查用户是否正在使用该应用程序,然后根据该行为修改行为,而不是检查是否打开了新窗口。我过去通过检查screen.width属性(可以在CSS中完成)来完成此操作,但是你可以更干净地完成它(由this post's回答):

if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
    // some code..
}

这更干净,因为您可以在加载时确定是否需要在当前窗口或新窗口中打开,而不是稍后对用户发生的事情做出反应。