【问题标题】:Programmatically determine whether a window is standalone or orphaned以编程方式确定窗口是独立的还是孤立的
【发布时间】:2015-04-10 15:26:08
【问题描述】:

我需要弄清楚一个窗口是作为独立窗口打开的,还是作为孤立窗口打开的。让我来说明一下我的意思。

假设我有两个 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

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

【问题讨论】:

  • 您对这两个页面都有控制权吗?他们在同一个域上吗?
  • 是的,我有控制权,而且他们在同一个域中。

标签: javascript asp-classic dom-events


【解决方案1】:

我得到了这个工作。

在我的 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 
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多