如何识别网页是在iframe内加载还是直接加载到浏览器窗口中?

2022-08-29 22:32:21

我正在写一个基于iframe的Facebook应用程序。现在我想使用相同的html页面来呈现普通网站以及Facebook中的画布页面。我想知道我是否可以确定页面是在iframe内加载还是直接在浏览器中加载?


答案 1

浏览器可能会由于同源策略而阻止访问。IE错误也会发生。以下是工作代码:window.top

function inIframe () {
    try {
        return window.self !== window.top;
    } catch (e) {
        return true;
    }
}

top并且两者都是对象(以及 ),因此您可以看到您的窗口是否是顶部窗口。selfwindowparent


答案 2

当在与父级位于同一源的 iframe 中时,window.frameElement 方法返回该元素(例如 或 ),其中嵌入了窗口。否则,如果在顶级上下文中浏览,或者父框架和子框架具有不同的原点,则其计算结果将为 。iframeobjectnull

window.frameElement
  ? 'embedded in iframe or object'
  : 'not embedded or cross-origin'

这是一个HTML标准,在所有现代浏览器中都有基本的支持。