【问题标题】:dynamic iframe height - seems to require reload of page动态 iframe 高度 - 似乎需要重新加载页面
【发布时间】:2013-11-18 18:56:15
【问题描述】:

首先,我有非常非常基本的 Javascript 知识和过时的 HTML 知识,所以我一直像个恶魔一样复制和粘贴,试图让它工作。

这是我目前使用的代码:(基于https://stackoverflow.com/a/819455/3005885

<script language="JavaScript">
<!--
function autoResize(id){
    var newheight;
    var newwidth;

    if(document.getElementById){
        newheight=document.getElementById(id).contentWindow.document .body.scrollHeight;
        newwidth=document.getElementById(id).contentWindow.document .body.scrollWidth;
    }

    document.getElementById(id).height= (newheight) + "px";
    document.getElementById(id).width= (newwidth) + "px";
}
//-->
</script>

<iframe id="iframe1" name="iframe1" src="source.html" width="100%" frameborder="0" onLoad="autoResize('iframe1');"></iframe>

我有一行 CSS/Javascript 的“按钮”,可以将您转到网站上的不同页面,并且在相关页面上有一个 iframe 和一系列包含在表格中的链接(用于组织目的)。当您第一次单击相关页面的“按钮”时,iframe 会以最小高度显示,直到您再次单击“按钮”,然后调整大小才会正常运行。

我一直在尝试让脚本(实际上是几个不同的脚本)来控制 iframe 元素,但似乎 iframe 必须“存在”才能听脚本。

我希望页面在 iframe 中以全高加载“source.html”页面,并且 iframe 的高度由指向 iframe 的其他页面决定。

编辑 1: 我刚刚尝试过这种方法:https://stackoverflow.com/a/526373/3005885,结果与以前相同。我做错了什么吗?一些基本的东西? JS 完美运行,但只有在第二次点击链接加载 iframe 所在的页面后,点击刷新/重新加载(或 command-R)并没有什么不同。

编辑 2: 这是另一种行为与我提到的其他方法相同的方法,只有这种方法会禁用滚动条,即使在初始加载太小而无法看到任何内容 (https://www.ibm.com/developerworks/community/blogs/peteryim/entry/determining_the_iframe_height_based_on_its_content6?lang=en) 时也是如此。

【问题讨论】:

  • 我会在iframe 内做something like this
  • 这似乎对我不起作用。我突然想到,我很可能错过了一些非常基本的东西(即:如何调用 Javascript、DOCTYPE 等)。不过谢谢你的建议,这似乎是一个不错的建议
  • 我的回答有点伪代码。在window.onloadiframe 中触发后,您需要计算iframeContentWidth/Height。如果不会出现任何cross-domain 问题,则可以确保在所有浏览器中工作。

标签: javascript html iframe


【解决方案1】:

事实证明,问题在于重定向设置的问题,该重定向设置将访问者从我们的主 URL 指向该站点实际存在的目录(组织上的噩梦,但此时是必要的)。错误如下:

Uncaught SecurityError: Blocked a frame with origin "http://www.mysite.org" from accessing a frame with origin "http://www.mysite.com". Protocols, domains, and ports must match. 

不知何故,.com 潜入了我们.org 网站上的重定向。由于我不知道的原因(服务器端的某些东西),该站点在.com 而不是.org 上表现正常,但它确实与javascript 混淆了。所以,罪魁祸首是打字太快了,所谓的“敲击键”。

蛋在我脸上,蛋在我脸上。

【讨论】:

  • 我仍然收到Uncaught TypeError: Object [object global] has no method 'resizeIframe'(这似乎是&lt;!DOCTYPE HTML&gt; 问题,但目前一切正常。
猜你喜欢
  • 2013-03-09
  • 1970-01-01
  • 2020-06-22
  • 2021-07-19
  • 1970-01-01
  • 2012-08-03
  • 2017-04-19
  • 2021-05-15
  • 2022-01-17
相关资源
最近更新 更多