我可以只允许某些视图在iframe中呈现吗?

我可以只允许某些视图在iframe中呈现吗?

问题描述:

我有一个应用程序在其他网站的iframe内部提供小部件。到目前为止这么好,但我怎么才能让这些小部件视图只能在iframe中加载,而不是直接加载?我可以只允许某些视图在iframe中呈现吗?

这应该工作

<iframe src="http://www.example.com/widgets/example"> 

但打字http://www.example.com/widgets/example直接进入浏览器不应该被允许。

什么是或有什么最好的方法来实现这个在rails?

+0

这些小部件存储在模型中吗? – DMH

+0

我有几个模型提供小部件,但它都在widgets_controller下,如果这有帮助? – Cojones

+0

虽然这不是100%的傻瓜证明,你可以传递一个参数在你的iframe上,并在WidgetsController上有一个'before_filter'来检查params的存在。如果没有,它会重定向到您选择的页面。如果您愿意,可以将其作为答案写作。 – DMH

请先检查您的网页窗口是一样的父窗口,如果没有,那么你的iframe内页:

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

那么如果没有可以在DOM中删除的所有内容:

// Pure JS something like 
var myNode = document.getElementById("foo"); 
myNode.innerHTML = ''; 
// jQuery 
$('html').empty(); 

或者您可以重定向到一个空白页说,它不允许外面的iframe来看待:

window.location = "http://www.yourul.com/empty_page"; 

Referring to

+0

所以我想没有rails的方式来解决这个问题,但只有JavaScript? – Cojones

+0

是的,没有办法在服务端,你可以做检查并设置一个cookie,但是你会从下次请求到你的服务器开始这个数据。 –

+0

嗯,这太糟糕了,不过谢谢你的帮助! – Cojones