iframe页面可以告诉他们何时被iframed吗?
-
19-09-2019 - |
题
因此,我知道,如果我将iframe包含在不在同一域上的页面上,我将无法通过浏览器策略访问该iframe的DOM,但是在iframe中的页面可以执行任何类型的父级文档访问吗?
具体而言,我必须考虑到这个问题的想法:
如果嵌入式页面可以说明它不是父窗口,则可以制作一个不可用的站点,以便如果页面检测到它是iFrameD的,则它会更改为“ go awaw away”页面,否则您只能制作它-iframe-able(类似于仅包含的页面的服务器端脚本),因此,在不iframed时到达页面时会获得“走开”页面。
如果iframed页面具有某些自由,则可以要求请求父窗口的样式表并将其设置为在样式表上,从而使该站点与父文档更加集成。 (当然,那么我可以使我的样式表与iframed网站更多地联系在一起,知道它会这样做,但我认为这是一个问题)。
有人知道吗?
解决方案
关于#1,是的,您可以告诉您是否使用一些简单的JavaScript构图:
<script type="text/javascript">
if (self != top)
{
// Framed!
}
</script>
关于#2,我不确定使用“顶部”变量可以做什么,但我确实知道您可以更改其位置(因此,如果您的网站由另一个站点构建,则可以使您的框架更改位置顶框架 - 本质上将用户直接重定向到您的站点)。
不确定您还能或不能对顶框架做什么 - 其他人可能能够在那里提供更多信息。
其他提示
你也可能对此有兴趣 这篇编码恐怖文章 关于检测帧。您可以检测到您是否被构图,但是也可以使用“父”页面来防止您对此采取行动。文章中的示例:
检测您是否被构架:
if (parent.frames.length > 0) {
top.location.replace(document.location);
}
防止框架检测和重定向:
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)
通过嵌入页面中的JavaScript可以通过:
if(top.location.href != self.location){
//do redirection or display message
}
您可以将此JavaScript作为站点模板的一部分,并防止在Iframe中显示任何页面
我以前做过,它已经奏效了:
<script type="text/javascript">
if (window.parent != null)
{
// Framed!
}
</script>
不隶属于 StackOverflow