2013-09-25 125 views
0

我使用jQuery根據其內容更改了iframe的大小,因此它不顯示滾動條。該腳本非常簡單,它在IE9中工作正常,但在Chrome中沒有任何反應,我添加了一個小的「警報」僅用於debbuging,並且我發現var「cont_height」未在Chrome中定義。iframe內容高度null chrome

所有的文件都在我的電腦中,包括在iframe中加載的頁面,所以不應存在跨域問題。

chrome中的調試工具給了我這個錯誤:「阻止一個帶有原點的幀」null「訪問一個原點爲」null「的幀,協議,域和端口必須匹配」。

下面是代碼

<script type="text/javascript" src="../js/jquery-1.10.2.min.js"> </script> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
       $('#mainframe').load(function() { 
        var cont_height = $(this).contents().height(); 
        alert(cont_height); 
        $(this).height(cont_height); 
       }); 
      }); 
     </script> 

我用「$(窗口).load」,而不是文件準備好嘗試,但我不認爲這是一個時機的問題,我不能夠訪問數據由於權限等原因。我會很感激你能給我的任何提示。解決方案也在javascript中。

+0

Chrome可以直接運行文件,沒有一個網絡服務器的問題。它不喜歡這個域是'null'(因爲沒有域)。 – Halcyon

+0

我明白了,我可以設置一個虛假的域名或者其他東西嗎?,我會使用本地文件進行評估。 – Faito

+0

@FritsvanCampen所說的是,如果你在文件系統上用('file:/// C/myFile.html')瀏覽你的html,它有一個空的原點並導致這個問題。您可以在本地Web服務器上運行這些服務器,然後將其排序('http:// localhost/myFile.html')。如果你想要一個簡單的Web服務器來使用,並且沒有IIS,Apache或其他的東西在運行,你可以安裝python並在你的html文件所在的路徑中運行'python -m SimpleHTTPServer' 。它是一個真正輕量級的本地Web服務器。 –

回答

0

這是我發現根據其內容調整iframe的最佳方式。

<script> 
    function resizeMe(id) { 

     var theFrame = document.getElementById(id); 




     var theBody = (theFrame.contentWindow.document.body || theFrame.contentDocument.body) 
     var newHeight = Math.max(theBody.scrollHeight, theBody.offsetHeight, theBody.clientHeight); 

     theFrame.height = (newHeight + "px"); 

    } 
</script> 


<iframe id="helloworld" ... onload="resizeMe('helloworld')"></iframe> 

您可以讓iframe文檔使用parent.resizeMe('helloworld')調用父文檔。

<body onload="parent.resizeMe('helloworld')"> 
... 
</body> 

或因爲你有jQuery的...

<body> 
    ... 
    ... 
    <script> 

     $(document).ready(function(){ 
      parent.resizeMe('helloworld'); 
     }); 
    </script> 

</body> 
+0

這是一個很好又安全的調整高度的方式,我很欣賞它,但問題在於它不允許我訪問iframe的contentWindow或contentDocument。也許有一種方法,iframe可以發送我的主頁它自己的身高? – Faito

+0

iframe是否與您的父窗口位於相同的域?還是從另一個域獲取內容? – teewuane

+0

iframe的內容是我的,在主頁是相同的文件夾。我需要消息通信這個頁面將在本地,在計算機上脫機測試。 – Faito