【问题标题】:Server-side detection that a page is shown inside an IFrame服务器端检测页面显示在 IFrame 中
【发布时间】:2009-04-07 13:59:01
【问题描述】:

是否可以确定 - 服务器端 - 页面是否已在 IFrame 中加载?

当我的应用程序中发生某些错误时,用户会被重定向到 Default.aspx 并显示错误消息。该错误消息的文本由异常处理代码在会话中设置。错误消息一经显示就会从会话中清除。

但是,我的部分应用程序必须使用 IFrame(它正在执行 3D 安全卡支付检查,它要求 IFrame 以显示卡提供商的身份验证 UI)。如果在此过程中发生错误,我的重定向将在IFrame 内生效。我正在使用 JavaScript 来检测并正确重新加载 Default.aspx,但这意味着我会快速连续获得两个 Page_Loads,并且错误消息只会显示在第一个上(然后清除)。

【问题讨论】:

  • Mozilla 开发者网络。我实际上认为我只是用这个打开了一整罐蠕虫,可能不应该在这里添加我的信息,直到我了解自己发生了什么,对不起。 (见stackoverflow.com/questions/15344187/…

标签: asp.net iframe


【解决方案1】:

您可以在客户端执行此操作:How to identify if a webpage is being loaded inside an iframe or directly into the browser window?

我找到的解决方法是将一些标识符放入在 iframe 中打开的 url 的查询字符串中。

【讨论】:

    【解决方案2】:

    我认为您无法检测到某种意义上的 Page.IsInIFrame() 功能,但您可以考虑为加载在 IFrame 中的页面和未加载的页面设置不同的基类t 以便您可以知道错误来自对 IFrame 页面的请求,这可能在一定程度上有所帮助。

    【讨论】:

      【解决方案3】:

      服务器端没有办法。唯一的方法是通过javascript。当你做重定向时,你能通过查询字符串传递错误消息或代码吗?

      【讨论】:

        【解决方案4】:

        使用带有 window.location 的 Javascript 进行重定向不起作用吗?强制进行整页重定向?

        【讨论】:

          【解决方案5】:

          这是不可能的,因为客户端可以在禁用 javascript 的情况下打开 iframe。 http://caniuse.com/#feat=iframe-sandbox

          【讨论】:

            【解决方案6】:

            简单地说,检查当前页面的 url.. 如果与 IFrame 页面相同,则重定向到 Default.aspx 或其他。

            Dim urlpath1 As String = HttpContext.Current.Request.Url.AbsoluteUri
            If Right(urlpath1, 13) = "WebForm1.aspx" Then
                   Response.Redirect("~/")
               Else
                   Response.Write("It's OK!")
               End If
            

            【讨论】:

            • 请注意,您需要使用 Request.UrlReferrer 而不是 Request.Url,因为 Request.Url 将返回 iframe Url。
            • @RonenFestinger,当您单击 iframe 中的链接时,它不会起作用,但是引荐来源网址和 url 将是相同的。
            猜你喜欢
            • 2010-11-13
            • 2020-05-17
            • 2015-10-05
            • 2013-02-20
            • 2013-10-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多