检测页面是否在iframe服务器端

时间:2009-07-24 18:24:28

标签: c# asp.net html asp.net-mvc

如果加载的页面在iframe中,我如何检测服务器端(c#,asp.net mvc)?感谢

5 个答案:

答案 0 :(得分:19)

然而,这是不可能的。

<iframe src="mypage?iframe=yes"></iframe>

然后检查服务器端是否包含iframe = yes 或者使用浏览器发送的Referer标题。

答案 1 :(得分:7)

在表单中使用以下代码:

<asp:HiddenField ID="hfIsInIframe" runat="server" />
<script type="text/javascript">
    var isInIFrame = (self != top);
    $('#<%= hfIsInIframe.ClientID %>').val(isInIFrame);
</script>

然后,您可以轻松检查它是否是代码隐藏中的iFrame:

bool bIsInIFrame = (hfIsInIframe.Value == "true");

经过测试并为我工作过。

编辑:请注意,您需要jQuery来运行上面的代码。要在没有jQuery的情况下运行它,只需使用以下(未经测试的)代码来设置隐藏字段的值:

document.getElementById('<%= hfIsInIframe.ClientID %>').value = isInIFrame;

编辑2:这仅在页面加载一次时有效。如果有人有想法改进这一点,请告诉我。在我的情况下,我幸运地只需要回发后的值。

答案 2 :(得分:3)

根据您对@ WTP答案的评论中所述,无法检查这符合您对“安全”的要求。

答案 3 :(得分:1)

我不认为服务器端可以执行此操作,那么为什么不在页面中放置隐藏控件呢?加载iframe中的URL时,您可以添加一些客户端代码来设置隐藏输入以指示您位于iframe中。最简单的检查是在onload方法的客户端,如下所示:

// Set hidden input
someHiddenInput.value = self != top

它比查询字符串更安全,但它仍然可能不够安全。

我的2美分。

答案 4 :(得分:0)

古老的问题,但为什么不采用更简单的方法

var isFramed = self !== parent
相关问题