あなたはjsFiddleを提供していないので、私はあなたが間違っているかもしれないとは言えませんが、私はあなたが何を記述しようとしています。あなたが経験しているのと同じ問題。あなたが言及したすべてのブラウザで正常に動作するようです。ただし、scrollWidth
を取得しようとするときにiframe
のドキュメントがロードされ、scrollWidth
が取得される前にiframe
の幅が0px
にリセットされていることを確認してください。これは、以前にロードされたドキュメントが新しくロードされたドキュメントよりも広い場合でも、scrollWidth
がドキュメントの幅を保持するようにするためです(scrollWidth
は、iframe
の中の前のドキュメントのwidth
を保持します)。
ここには、jsFiddleです。いくつかのランダム化コードがあなたのために重要なビットのみであり、テストやデモの目的のためにそこにあります:
var frame = document.getElementById("frame");
frame.onload = function() {
$("#frame").css("width", '0px');
$("#frame").css("width", frame.contentDocument.documentElement.scrollWidth + 'px');
}
私はここでそれが簡単に自分のためにするために、いくつかのjQueryを使用していますが、あなたはおそらくそれを置き換えることができますどのコードでもiframe
のwidth
を設定していますが、frame.contentDocument.body.scrollWidth
の代わりにframe.contentDocument.documentElement.scrollWidth
を使用しています。これにより、body
要素の代わりにhtml
要素の幅が確保されます。iframe
にロードされている文書のhtml
またはbody
タグがmargins
またはpaddings
に設定されている可能性があります。
編集:私は少し行くのより持っていた
I あなたは、FirefoxとChromeでの両方で起こることを記述している正確な動作を得ることができます。 scrollWidth
を読む前にiframe
のwidth
を0px
に設定しないと、現在読み込まれているドキュメントの幅が以前に読み込まれたドキュメントの幅より小さくなり、iframe
にoverflow: visible
が設定されます。この現象の例は、hereです。 (scrolling
がyes
に設定され、overflow
がvisible
に設定されている限り、ChromeとFirefoxの両方で発生します)。
私がiframe
のwidth
をリセットしない場合は、scrollWidth
は以前にロードされた文書のwidth
の値がマイナス垂直スクロールバーの幅を保持しているようです。したがって、width
をscrollWidth
に設定したままにすると、そのたびに、新しく読み込まれたドキュメントが以前のドキュメントよりも小さい場合、iframe
のwidth
は、垂直スクロールのwidth
に等しいピクセル分だけ減少しますバー。
結論:は決定的な修正がiframe
のscrollWidth
を読む前にiframe
0px
へのwidth
(またはをロードされる文書のminimum width
以下のもの)を設定することであろう、新しい文書がロードされた後に起こるはずです。
jsfiddleの例がありますか? –