2013-04-18 9 views
5

私のページにiframeがあります。その内容は、ページの本体のリンクをクリックすると変更されます。私はそうのように、内容を一致させるためにはiframeの幅を変更しようとしています:FF/IEのiframeに一貫性のないスクロール幅

frame.contentDocument.body.scrollWidth 

これは、Chromeで正常に動作しますが、FirefoxとIEで、私は新しいリンクがクリックされるたびに縮小インラインフレームを取得します。 FFは1回のクリックあたり20-37ピクセルを減じているようです。

私はグーグルとスタックオーバーフローを検索しました。一部のsuggestionsは、表示とオーバーフローのCSSプロパティに関連していました。私はCSSに変更を加えましたが、それは役に立たなかった。私はFF 21 Betaをそこに固定したいと考えても試みましたが、そうではありません。

+4

jsfiddleの例がありますか? –

答えて

2

あなたは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を使用していますが、あなたはおそらくそれを置き換えることができますどのコードでもiframewidthを設定していますが、frame.contentDocument.body.scrollWidthの代わりにframe.contentDocument.documentElement.scrollWidthを使用しています。これにより、body要素の代わりにhtml要素の幅が確保されます。iframeにロードされている文書のhtmlまたはbodyタグがmarginsまたはpaddingsに設定されている可能性があります。

編集:私は少し行くのより持っていた

I あなたは、FirefoxとChromeでの両方で起こることを記述している正確な動作を得ることができます。 scrollWidthを読む前にiframewidth0pxに設定しないと、現在読み込まれているドキュメントの幅が以前に読み込まれたドキュメントの幅より小さくなり、iframeoverflow: visibleが設定されます。この現象の例は、hereです。 (scrollingyesに設定され、overflowvisibleに設定されている限り、ChromeとFirefoxの両方で発生します)。

私がiframewidthをリセットしない場合は、scrollWidthは以前にロードされた文書のwidthの値がマイナス垂直スクロールバーの幅を保持しているようです。したがって、widthscrollWidthに設定したままにすると、そのたびに、新しく読み込まれたドキュメントが以前のドキュメントよりも小さい場合、iframewidthは、垂直スクロールのwidthに等しいピクセル分だけ減少しますバー。

結論:は決定的な修正がiframescrollWidthを読む前にiframe0pxへのwidthまたはをロードされる文書のminimum width以下のもの)を設定することであろう、新しい文書がロードされた後に起こるはずです。

+0

私は実際に解決策を確認する時間がなかったが、あなたは多くの作業をしているので、私はあなたに賞金をあげよう。私はそれが正しいとマークすると、私は確認することができます。 – CaptainThrowup

+0

@CaptainThrowup - あなたはまだ確認しましたか? –

0

contentDocumentの代わりにcontentWindowを試してみてください。

関連する問題