我正在写一个基于iframe的Facebook应用程序。现在,我想使用相同的html页面来呈现普通网站以及facebook中的画布页面。我想知道是否可以确定页面是否已在iframe中加载或直接在浏览器中加载?
window.top
由于相同的原始策略,浏览器可能会阻止访问。IE错误也会发生。这是工作代码:
function inIframe () {
try {
return window.self !== window.top;
} catch (e) {
return true;
}
}
top
和self
都是两个window
对象(以及parent
),因此你正在查看你的窗口是否是顶部窗口。
这似乎在Firefox中可以正常工作。它也可以在其他浏览器中使用吗?
在iframe中有一个内含iframe的页面,以便从我的子iframe中测试我的父iframe是否嵌入在该页面中,我使用if(parent === top)
@sglessard如果子页面和父页面来自不同的域,则Firefox将抱怨“同源策略”(www.w3.org/Security/wiki/Same_Origin_Policy),并且代码无法正常工作
这对我来说适用于IE 11、10和9。它还适用于FF和Opera,当然也适用于Chrome。我还没有遇到任何问题。
对于那些仍然摇摆于1995年的高科技最新的,
window.self !== window.top
返回true
从内容中运行时frame
,或者iframe
。