以编程方式确定 window 是独立的还是孤立的
Programmatically determine whether a window is standalone or orphaned
我需要弄清楚 window 是作为独立打开的还是孤立的。让我说明一下我的意思。
假设我有两个 ASP 页面,我将它们称为 PARENT.asp 和 CHILD.asp。此外,还有一个重定向页面,我将其称为 CHILD-REDIRECT.asp.
当点击 CHILD.asp 上的某个按钮时,它会重定向到 CHILD-REDIRECT.asp,其中包括需要 运行 某个按钮的客户端 Javascript 代码方式,取决于它是否有父级(基于 window.opener == null
)。为了便于说明,我会说 Javascript 代码是一个布尔变量,我将其称为 IsOrphan
.
因此,我打开一个新浏览器 window 并导航到 CHILD.asp。然后我单击重定向到 CHILD-REDIRECT.asp 的按钮并启动 Javascript。因为我把它作为一个独立的页面打开,IsOrphan = FALSE
.
现在,我打开一个新的浏览器并导航到 PARENT.asp。此页面包含一个 window.open
调用,可在新的 window 中打开 CHILD.asp。当 CHILD.asp 打开时,我关闭 PARENT.asp,这样 CHILD.asp 现在处于孤立的 window 中。所以现在当我单击按钮并且页面重定向到 CHILD-REDIRECT.asp 时,我需要 IsOrphan = TRUE
.
关于如何做到这一点有什么想法吗?我正在研究通过 CHILD.asp onload
事件上的 window.opener 为父级设置一个变量;然而,由于这些页面的复杂性,这并不像听起来那么容易。现在,Javascript 检查 window.opener
以启动代码,但当然,它不知道独立页面和孤立页面之间的区别。我希望有人知道 good/better 的方法来做到这一点。
我成功了。
在我的 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
}
果然,它正在做我需要它做的事情。
我需要弄清楚 window 是作为独立打开的还是孤立的。让我说明一下我的意思。
假设我有两个 ASP 页面,我将它们称为 PARENT.asp 和 CHILD.asp。此外,还有一个重定向页面,我将其称为 CHILD-REDIRECT.asp.
当点击 CHILD.asp 上的某个按钮时,它会重定向到 CHILD-REDIRECT.asp,其中包括需要 运行 某个按钮的客户端 Javascript 代码方式,取决于它是否有父级(基于 window.opener == null
)。为了便于说明,我会说 Javascript 代码是一个布尔变量,我将其称为 IsOrphan
.
因此,我打开一个新浏览器 window 并导航到 CHILD.asp。然后我单击重定向到 CHILD-REDIRECT.asp 的按钮并启动 Javascript。因为我把它作为一个独立的页面打开,IsOrphan = FALSE
.
现在,我打开一个新的浏览器并导航到 PARENT.asp。此页面包含一个 window.open
调用,可在新的 window 中打开 CHILD.asp。当 CHILD.asp 打开时,我关闭 PARENT.asp,这样 CHILD.asp 现在处于孤立的 window 中。所以现在当我单击按钮并且页面重定向到 CHILD-REDIRECT.asp 时,我需要 IsOrphan = TRUE
.
关于如何做到这一点有什么想法吗?我正在研究通过 CHILD.asp onload
事件上的 window.opener 为父级设置一个变量;然而,由于这些页面的复杂性,这并不像听起来那么容易。现在,Javascript 检查 window.opener
以启动代码,但当然,它不知道独立页面和孤立页面之间的区别。我希望有人知道 good/better 的方法来做到这一点。
我成功了。
在我的 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
}
果然,它正在做我需要它做的事情。