检查我是否在cfwindow中

时间:2014-11-17 22:46:18

标签: coldfusion cfwindow

我的网站上有一个错误页面,每当出现错误时都会被调用,有时来自cfwindow,然后我不想显示页眉和页脚。

我有很多cfwindows可能会产生此错误(正在处理......)

所以不是在调用cfwindow的父窗口中添加信息,我只想(如果可能的话)检查错误页面

if(parent.cfwindow){remove the header and footer}

谢谢你的帮助

1 个答案:

答案 0 :(得分:2)

每个更新/澄清的问题(关于错误页面的这个问题)..

虽然javascript仍然可以管理这个,但这最适合服务器端。

我不知道您的OnError方法是什么样的,或者您是否正在使用application.cfm。以下是我如何做到这一点:

我没有直接重定向到/error.cfm或任何错误页面,而是:

<cfif not isDefined("url.inWindow")>
    <cflocation url="/error.cfm" addtoken="no" />
<cfelse>
    <cflocation url="/error.cfm?inWindow=1" addtoken="no" />
</cfif>

在错误文件中,我根据url.inWindow的状态执行了一些<cfif>

Javascript,尤其是jQuery,也有这样做的方法,您可以删除页眉和页脚内容并使用unwrap()来提取内容区域的内容,如下所示:JS - Remove a tag without deleting content


我没有使用CFWINDOW,所以很遗憾不熟悉细微差别,而且Railo支持它有点不同

冷聚变

实现此目的的最佳ColdFusion路由可能只是通过源链接传递url变量。

<cfwindow ... source="/demo/6/windowContentA.cfm?inWindow=1">

然后,在文件中。

<cfif isDefined("url.inWindow")>The page is within a window</cfif>

的Javascript

在javascript中执行此操作的方法与任一方法有关(这是我无法测试的部分:/无法访问ACF。)检查窗口是否是顶部元素(但可能不行。)。

<a href="javascript:void(0)" onclick="alert((self==top ? 'in a popup' : 'not in a popup'));">Test link</a>

或者(如果这不起作用,检查页面中是否存在元素。

<a href="javascript:void(0)" onclick="alert(( document.getElementById('cf_window1') ? 'in a popup' : 'not in a popup'));">Test link</a>

因为CFWindow创建了一个名为cf_window1的元素,所以我用它进行测试,但你应该可以使用任何元素名称。如果需要,您可以专门为此目的创建一个元素。

虽然这是我设法测试的方式...通过一些无关紧要的魔法,你可以在脚本标签中使用类似的javascript来做除警报之外的事情。

<script>
  if(self==top) {
    // The page is outside of a frame.
  }
</script>

或寻找元素路线

<script>
  if(document.getElementById('cf_window1')) {
    // The page is within a frame.
  }
</script>

这两条路线都不应该被认为是非常安全的。这是为了方便和展示,但你不应该认为它们难以理解,因为它们不是。