2013-09-25 98 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