2016-04-27 53 views
0

我有一個應用程序在其他網站的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

回答

0

請先檢查您的網頁窗口是一樣的父窗口,如果沒有,那麼你的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

相關問題