2015-10-23 42 views
0

我試圖在另一個網頁(不在我的服務器上託管)上加載網頁,但由於跨站點/安全腳本,我無法加載某些網頁。例如,谷歌不會在iframe中顯示出來,或者使用jQuery:某些網站將不會與Iframe和.load()函數一起出現

<script> 
     $("#siteload").html('<object data="http://google.com">'); 
    </script> 

剛一說明:我不是試圖加載谷歌而言,只是不會允許任何I幀..網頁

有沒有人知道解決方法?如何加載我的服務器上的.html文件,將工作? &怎麼樣?

謝謝你的幫助。

+0

沒有解決方法,除了可能reproxify google.com服務器端,將基本標記設置爲相關域以處理所有可能的相對鏈接路徑,然後爲鏈接中的所有鏈接和其他鏈接中的鏈接設置相同的鏈接指向其他域...我想你最好不得不買谷歌 –

+0

看看控制檯中的錯誤信息。 – SLaks

回答

0

某些網站會阻止iframe的使用。 Google就是其中之一。

編輯:我覺得谷歌發送一個sameorigin設置隨着它。

0

一些可能的解決方法:

  1. 不要使用iframe,使用DIV和$ .load()

  2. 查找的情況下,逐案解決方案,在谷歌的情況下使用,而不是Google Custom Search Engine(有大多數事情iframe的解決方案,但它需要時間來找到他們)

  3. 使用代理

  4. 在有條件的情況(谷歌這樣的情況下),使自己的網頁,並嘗試與原始(谷歌)頁面的樣式,然後使用API​​來獲取搜索內容

注意3 4可能花費很多錢,具體取決於流量

+0

感謝Gio!它看起來$ .load()也被阻塞。在代理的情況下,你的意思是編輯URL本身?你能否將我轉到一個資源,在那裏我可以嘗試提供一個不起作用的網頁?再次感謝。 – icecreamrabbit

+0

我應該說 - 在谷歌的情況下,有兩個問題:你需要在同一個來源,所以$ .load()不起作用,並且你不能加載一個iframe,所以iframe不工作。我不建議使用代理,因爲它可能會變得昂貴,但我的意思是這樣的:http://www.frankhq.io/blog/2012/11/14/how-to-setup-a-private-proxy -server-on-ec2-in-under-10-minutes /訪問網站的用戶連接到你的服務器,你的服務器檢索google頁面並將它發送給他們。僅供參考,我有一次類似的問題,我結束了混合的解決方案2和4 – Gio

+0

也許這不是我可以給你的最好的鏈接......底線是,它取決於你有什麼服務器。例如。如果它是節點,則使用類似node-http-proxy的東西 – Gio

0

這是有意完成的,網站開發人員可以在響應中設置某些標題以控制哪些網址(其他網站)可以加載其內容<iframe>, <frame> or <object>。這是一種保護您的網站免受類似Clickjacking等攻擊的方式。

例如:大多數瀏覽器都支持的X-Frame-Options

有對X框,選擇三個可能的值:

DENY 
The page cannot be displayed in a frame, regardless of the site attempting to do so. 

SAMEORIGIN 
The page can only be displayed in a frame on the same origin as the page itself. 

ALLOW-FROM uri 
The page can only be displayed in a frame on the specified origin. 

需要注意的是X框選項:允許 - 從不支持Chrome,Safari等。

現代瀏覽器使用新的內容安全策略(CSP)處理這些問題。所以,你可以使用新的頭控制這樣的:

內容安全-政策:框架祖先

的CSP 2.0是由所有新的瀏覽器支持是完全向後兼容,以及。

我知道這不是您的問題的答案,但是這些信息會讓您瞭解爲什麼您無法將網站加載到您的iFrame中。

相關問題