2013-02-28 33 views
0

我有一個腳本,從一個數組需要的網址,然後將它們放入一個iframe此起彼伏:跳過給出同樣的原產錯誤或只是不加載的iframe源

<script type="text/javascript"> 
    $(document).ready(function() { 
     var array = ['http://www.example1.come', 'http://www.example2.com', 'http://www.example3.com']; 
     var beforeLoad = (new Date()).getTime(); 
     var loadTimes = []; 
     $('#1').on('load', function() { 
      loadTimes.push((new Date()).getTime()); 
      $('#1').attr('src', array.pop()); 
      if (array.length === 0) { 
       $.each(loadTimes, function (index, value) { 
        $("#loadingtime" + index).html(value - beforeLoad); 
       }); 
      } 
     }).attr('src', array.pop()); 
    }); 
</script> 

我的問題是,如果我把像「google.com」或「youtube.com」的網址 - 它不會加載,從而使其他來源卡住,而不是加載太多。如果我嘗試將google.com作爲源代碼放入iframe,我在Chrome控制檯模式下出現此錯誤:Refused to display 'http://www.google.com/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.

我該如何做到這一點,如果在我的URL列表中有這樣一個URL會導致此錯誤並且不會加載,它會跳過該網址,並加載下一個呢?我可以把超時或什麼?

回答

1

不幸的是,我認爲你不能擺脫這個錯誤,因爲它是一個安全功能,防止clickjacking

See MDN欲瞭解更多信息。據此,X-Frame-Options頭現在支持all main desktop browsers

有一些想法,您可以嘗試:

  1. 你的代碼似乎在Firefox(火狐每晚,2013年1月6日)的工作,因此,如果更改瀏覽器是一個選項,你可以試試。
  2. 使用Ajax,您可以在更改iframe.src屬性之前檢查網站的標題。如果其中一個標題是「X-Frame-Options」,則可以選擇繼續到另一個URL。
    當然使用這種方法你會偶然發現CORS,但這個功能可以禁用in Firefoxin Chrome
    顯然在你的情況下,通過Ajax加載一個網頁,然後測量它的加載時間似乎不是一個好主意。但是,您可以嘗試加載子頁面(如「http://youtube.com/SOMETHING」)而不是root頁面,以避免緩存您正在測量的內容。
+0

謝謝,我只是在Firefox上測試了這個,並且確實沒有制動其他來源並顯示所有結果。似乎使用Firefox或尋找另一種方法來獲取加載時間是我唯一的選擇 – user1894929 2013-02-28 07:44:48

0

從技術上講,您可以嘗試下載網頁上的服務器,然後顯示該文件。

法律上你不被允許這樣做。

+0

我認爲user1894929的意思是放棄(跳過)加載一個網頁,它響應'X-Frame-Options'標題。 – kamituel 2013-02-28 07:18:36

相關問題