在iFrame中维护重定向

时间:2012-07-23 21:22:24

标签: javascript http redirect iframe

我正在构建一个应用程序,我想将另一台服务器中的页面加载到我的页面中。我从中提取数据的特定页面取决于该外部服务器上正在运行的查询(具有OAuth访问权限)。获得该页面的URL后,我将其加载到iFrame中并将其显示在我的页面上。

问题是,查询给我的URL实际上是一个页面,在到达我真正想去的地方之前转发了三次。为了使事情变得更复杂,它在初始页面上也有frame-buster代码。我将页面设置为重定向到页面,该页面在页面卸载时返回204状态,以便击败帧破坏者,但现在它只是停留显示初始空白页面而不是我想要的内容,即三个重定向的结尾。

我最初的想法是尝试在页面卸载时捕获传出位置请求的代码。我希望能够看到用户被重定向到哪里并在iFrame中加载该请求。重复三次以在iFrame中获取正确的页面。然而,直观地说,这感觉它不应该能够工作,当然它不会因为让页面看到用户离开网站的位置将是一个主要的隐私问题。

接下来,我想也许我可以依次解析每个新页面,因为它被加载到iFrame中以找到重定向的脚本。我很确定它是在服务器端完成的,但是,因为查看我得到的代码并没有改变任何东西。

我开始寻找在iFrame中维护重定向的方法。也就是说,允许重定向发生,但强制它保持在iFrame内,同时还防止帧破坏程序代码执行任何操作。这将是最简单的解决方案,但我找不到一个好方法。现在,我只是在iFrame中加载了一个空白页面,我认为服务器端有一些东西可以执行不在iFrame中运行的重定向。帧buster代码仅阻止整个文档更改,而不是iFrame。有没有一个好方法可以做到这一点,还是我做错了事情?

2 个答案:

答案 0 :(得分:1)

要防止来自here

的帧破坏者
<script type="text/javascript">
    var prevent_bust = 0  
    window.onbeforeunload = function() { prevent_bust++ }  
    setInterval(function() {  
      if (prevent_bust > 0) {  
        prevent_bust -= 2  
        window.top.location = 'http://server-which-responds-with-204.com'  
      }  
    }, 1)  
</script>

答案 1 :(得分:0)

在本地通过curl加载第一页,删除破坏代码,使所有链接绝对并在iframe中显示。

它应该按照预期重定向并做你喜欢的事情。 祝你文件中的所有网址都绝对好运。不要忘记在脚本标记后粘贴自己的代码时可能需要覆盖的javascript网址和功能。