我的页面中有一个iframe,其内容通过单击页面主体中的链接进行更改。我试图调整iframe的宽度以匹配内容,如下所示:
frame.contentDocument.body.scrollWidth
这在Chrome中运行良好,但在Firefox和IE中,每次点击新链接时,我都会收到一个缩小的iframe。 FF似乎每次点击减去20-37px。
我用Google搜索并搜索了Stack Overflow。我发现的一些suggestions与显示和溢出CSS属性有关。我对CSS进行了更改,但没有帮助。我也尝试过FF 21 Beta,希望它能在那里修复,但事实并非如此。
答案 0 :(得分:2)
由于你还没有提供jsFiddle,我不能告诉你你可能做错了什么,但我已经试着去做你正在描述的事情而且我并没有真正体验过任何相同的事情。您遇到的问题。它似乎在你提到的所有浏览器中都能正常工作。如果您确保在尝试获取iframe
时加载了scrollWidth
中的文档,并且在您之前将iframe
的宽度重置为0px
得到scrollWidth
。这是为了确保scrollWidth
保持文档的宽度,即使先前加载的文档比新加载的文档宽(在这种情况下scrollWidth
将保持文档的width
iframe
)中的上一个文档。
这是 jsFiddle 。其中有一些随机化代码用于测试和演示目的,对您来说唯一重要的是:
var frame = document.getElementById("frame");
frame.onload = function () {
$("#frame").css("width", '0px');
$("#frame").css("width", frame.contentDocument.documentElement.scrollWidth + 'px');
}
我正在使用一些jQuery让自己更容易在这里,但你可以用你已经设置width
iframe
的任何代码替换它,我正在使用frame.contentDocument.documentElement.scrollWidth
代替frame.contentDocument.body.scrollWidth
。这可以确保我获得html
元素的宽度而不是body
元素的宽度,问题的一部分可能是html
或body
标记加载到iframe
的文档包含margins
或paddings
。
修改强>
我已经多了一点,我可以获得你在Firefox和Chrome中所描述的确切行为。如果我在阅读width
之前未将iframe
的{{1}}设置为0px
,则会发生这种情况,当前加载的文档的宽度小于之前加载的文档,我在scrollWidth
上设置了overflow: visible
。看一下 here 的行为示例。 (只要iframe
设置为scrolling
而yes
设置为overflow
,就会在Chrome和Firefox中发生。
似乎如果我不重置visible
的{{1}},则width
会保留先前加载的文档的iframe
减去宽度的值垂直滚动条。那么,如果我继续将scrollWidth
设置为width
,每次我这样做,并且新加载的文档比前一个文档小,width
scrollWidth
减少一个等于垂直滚动条的width
的像素数。
结论:明确的解决方法是将iframe
的{{1}}设置为width
(或任何小于或等于在阅读width
的{{1}}之前,将会加载<{1}}文档的iframe
,这应该在加载新文档之后发生。
答案 1 :(得分:0)
尝试使用contentWindow
代替contentDocument
。