javascript - 在 iFrame 中维护重定向

标签 javascript http redirect iframe

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

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

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

接下来,我在想也许我可以在每个新页面加载到 iFrame 时依次解析它以找到重定向脚本。不过,我很确定它是在服务器端完成的,因为查看我得到的代码没有发现任何问题。

我开始寻找在 iFrame 中维护该重定向的方法。也就是说,允许重定向发生,但强制它保留在 iFrame 内,同时还阻止 frame-buster 代码执行任何操作。这将是最简单的解决方案,但我找不到一个好的方法来做到这一点。现在,我只是在 iFrame 中加载了一个空白页面,我认为服务器端执行重定向的某些内容未在 iFrame 中运行。 frame buster 代码只防止整个文档发生变化,而不是 iFrame。有没有好的方法可以做到这一点,还是我的做法不对?

最佳答案

为了防止帧破坏,来自 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>

关于javascript - 在 iFrame 中维护重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11620703/

相关文章:

javascript - 如何比较两个正则表达式?

json - 如何在 GET 请求中发送结构

java - BufferedWriter 中的非英文字母

mysql - 在 .htacces magento 上将 non.www 的规则重写为 https 到 www.https

javascript - 如何在 NextJS 中处理重定向到外部 url?

javascript - Uncaught ReferenceError : function is not defined error when calling riot function

javascript - 为什么 import xxx = require ('package' ) 比 const xxx = require ('package' ) 更好?这是真的吗?

external - 减少外部 JavaScript 调用(HTTP 请求)次数的最佳方法是什么?

java - 如何知道 httpservletrequest 是否包含一些文件/图像?

php - htaccess 文件仍然是将 .htm 重定向到 .php 版本文件的最佳方式吗?