2017-06-16 33 views
4

Snip.ly很好地檢查輸入的Web地址是否可以在iframe中使用。 我想用紅寶石複製它。查看他們的代碼,他們發送一個ajax請求到他們的服務器,並在那裏他們進行驗證。檢查url是否可以在iframe中加載

即使廣泛的谷歌搜索無法找到任何可以幫助我完成的任務。

我使用的情況是,我們讓用戶添加新聞列表到他們的頁面,這是iframe中顯示,想顯示它如果輸入的網址可以在iframe中使用。

+0

如果該頁面包含一個JS代碼,確定它是否是一個iframe中,並根據結果,以觸發AJAX請求服務器 ? – yeyo

+0

@yeyo我並沒有完全得到你的意思 – Alfie

+0

很多事情像Adblock的,防火牆等,可以阻止加載URL。我認爲你可以在後端做的最好的事情是向請求的url發送請求,檢查是否有任何響應,並檢查'X-Frame-Options'響應頭。它可以阻止將響應加載到iframe中。 –

回答

0

您可以通過檢查X-Frame-Options標題來找出某些情況。但正如你在評論中提到的那樣,它並不是一直工作的。

根據我的經驗,最好完全側重解決問題。 如果您通過您的Rails服務器反向代理您的請求,那麼您可以在iframe中始終顯示任何內容。

以下是該過程的一個示例。我假設你的服務器是your-server.com,並且用戶想要在user.com/list上列出一個頁面。它的工作方式是:

  1. 設置一個iframe的src到https://your-server.com/proxy?url=https://user.com/list`
  2. 攔截請求,提取網址:https://user.com/list
  3. https://user.com/list執行HTTP請求到內容獲取
  4. 返回它到瀏覽器就好像它來自你自己的服務器

這種方法幾乎一直工作,但它有其他限制: - 您應該反向代理該網頁上具有相對網址的任何資產;否則的CSS /圖像可能被打破 - 你必須在該網頁上處理Ajax請求

您可以修復這些中,通過將HTML步驟4 之前,你可以使用https://github.com/waterlink/rack-reverse-proxy步驟2和3,而不是重新實施您自己的反向代理。

你可以把它架在config/application.rb使用下面的代碼:

config.middleware.insert(0, Rack::ReverseProxy) do 
    reverse_proxy_options timeout: 10 # avoids waiting for pages that take forever to load 
    reverse_proxy(/proxy\?url=(.*)/, '$1') # reverse proxy on the url parameter 
end 
相關問題