测试当前页面是否在影子箱内? (所以我可以关闭影子框并在主窗口中重新打开该页面)

时间:2010-05-26 10:20:57

标签: ruby-on-rails shadowbox

我的网站中有几个页面在阴影框窗口而不是主窗口中打开。我的问题是,如果用户会话到期,然后用户点击在影子框中打开的其中一个链接,他们将被重定向到登录页面INSIDE THE SHADOWBOX,这是我不想要的。我一直在努力想办法处理这个问题 - 我想到的一种方式,看起来有点笨拙,在登录页面上测试我们是否在影子箱中,如果我们关闭它并将父窗口重定向到登录页面。

a)这看起来像是一个明智的计划吗?我将以下内容添加到我的登录页面,该页面有效:

  $(document).ready(function(){
    if(window.parent.location != window.location){
      window.parent.location.href = window.location;
    }
  }

但是我必须等待shadowbox完成加载页面然后重定向。所以它有效,但我说有点笨拙。有更好的方式吗?

感谢任何建议 - 最多

3 个答案:

答案 0 :(得分:1)

我知道这篇文章已经过时了,但最近我不得不解决同样的挑战,并认为其他人可能会在这篇文章中找到答案。

上面给出的答案很棒,但是不能很好地回答原来的问题,这不是真的“如何检查页面是否在影子箱中?”,但是“如何避免页面加载? shadowbox然后在影子盒关闭后再次加载?“

这是我做的:

检查活动会话的代码转发到注销页面,该页面清除任何剩余的会话值并将用户发送到登录页面。我将以下代码添加到onload函数的注销页面中:

if (window.parent) {
    window.parent.location.replace('your-login-url');
} else {
    window.location.replace('your-login-url');
}

现在,当调用注销页面时,它会在浏览器获得任何登录页面视图之前清除影子框。效果很好。希望这可以帮助别人。

答案 1 :(得分:0)

使用isOpen()

http://www.shadowbox-js.com/api.html

如果要访问shadowbox内的浏览器位置,请尝试this.link.baseURI查看是否与window.location相同。

答案 2 :(得分:0)

在登录页面上尝试此操作:

var Shadowbox = window.parent.Shadowbox;

然后检查Shadowbox是否未定义。