以编程方式确定窗口是独立的还是孤立的

时间:2015-04-10 15:26:08

标签: javascript javascript-events asp-classic

我需要弄清楚窗口是否作为独立窗口打开,而不是它是孤立的。让我说明一下我的意思。

假设我有两个ASP页面,我将其称为PARENT.asp和CHILD.asp。此外,还有一个重定向页面,我将其称为CHILD-REDIRECT.asp。

当单击CHILD.asp上的某个按钮时,它会重定向到CHILD-REDIRECT.asp,其中包括需要以某种方式运行的客户端Javascript代码,具体取决于它是否具有父级(基于window.opener == null)。为了便于说明,我会说Javascript代码是一个布尔变量,我称之为IsOrphan。

所以,我打开一个新的浏览器窗口,然后导航到CHILD.asp。然后,我单击重定向到CHILD-REDIRECT.asp的按钮,然后启动Javascript。因为我将其作为独立页面打开,IsOrphan = FALSE。

现在,我打开一个新浏览器并导航到PARENT.asp。此页面包含一个window.open调用,在新窗口中打开CHILD.asp。当CHILD.asp打开时,我关闭PARENT.asp,以便CHILD.asp现在处于孤立窗口。所以现在当我点击按钮并且页面重定向到CHILD-REDIRECT.asp时,我需要IsOrphan = TRUE。

有关如何做到这一点的任何想法?我正在寻找通过CHILD.asp onload事件上的window.opener为父设置变量;然而,由于这些页面的复杂性,这并不像听起来那么容易。就目前而言,Javascript检查window.opener以启动代码,但当然,它不知道独立页面和孤立页面之间的区别。我希望那里有人知道一个好的/更好的方法来做到这一点。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我让这个工作。

在我的CHILD.asp页面中,我在页面顶部设置了以下内容:

<script>
   var isChild;
   if (window.opener == null) { isChild = false } else { isChild = true }
</script>

这会在页面加载时实例化isChild客户端变量。

我的服务器端经典ASP代码包含如下内容:

response.write("javascript: if (1=1) { window.location.href='CHILD-REDIRECT.asp?ID=" & someID & "';")

我不得不承认我的一个挂断是如何将它发送到服务器端代码。然而,我意识到这将是一个没有实际意义的点,因为客户端值应该在呈现时存在。

所以,我改写了这样:

response.write("javascript: if (1=1) { window.location.href='CHILD-REDIRECT.asp?ID=" & someID & "&isChild=' + isChild;")

在CHILD-REDIRECT.asp中,我补充道:

var boolChild = <%request.QueryString("isChild")%>

所以现在,我有一个标志,指示页面是否由父级生成。在代码的后面,我有这个:

if (window.opener == null && boolChild) { 
   // do something 
}

果然,它正在做我需要做的事情。