我正在写一个基于iframe的Facebook应用程序。 如今,我想使用相同的html页面来呈现普通网站以及facebook中的画布页面。 我想知道是否能够肯定页面是否已在iframe中加载或直接在浏览器中加载? php
我正在使用这个: html
var isIframe = (self.frameElement && (self.frameElement+"").indexOf("HTMLIFrameElement") > -1);
if (window.frames.length != parent.frames.length) { page loaded in iframe }
可是,只有在您的网页和将您加载到iframe的网页中,iframe的数量不一样时。 在您的网页中没有iframe能够保证此代码的结果100% 浏览器
在每一个页面中编写此JavaScript 框架
if (self == top) { window.location = "Home.aspx"; }
而后它将自动重定向到主页。 dom
若是您想知道用户是否正在从Facebook页面选项卡或画布访问您的应用程序,请检查“签名请求”。 若是您不了解,则多是用户未从Facebook访问。 为了确保确认signed_request字段结构和字段内容。 网站
使用php-sdk,您能够像这样得到Signed Request: spa
$signed_request = $facebook->getSignedRequest();
您能够在此处阅读有关签名请求的更多信息: code
https://developers.facebook.com/docs/reference/php/facebook-getSignedRequest/ htm
和这里: ip
https://developers.facebook.com/docs/reference/login/signed-request/
在与父源相同的iframe中, window.frameElement
方法返回嵌入窗口的元素(例如iframe
或object
)。 不然,若是在顶级上下文中浏览,或者父框架和子框架具备不一样的来源,则它将评估为null
。
window.frameElement ? 'embedded in iframe or object' : 'not embedded or cross-origin'
这是HTML标准 ,全部现代浏览器都提供基本支持。