1

IFrame はコンテンツに応じてサイズ変更されるように設計されており、ほとんどのブラウザーで動作しますが、Mozilla Firefoxでのみ動作します。最初の読み込みのみが機能しますが、その後のイベントの読み込みは機能しません。

再び機能させるには、ページを更新するか、最初にブラウザのキャッシュをクリアする必要があります..

コードは次のとおりです。

function sizeIFrame() {
var subscriptionFrame = jQuery("#subscriptionFrame");
var innerDoc = (subscriptionFrame.get(0).contentDocument) ?subscriptionFrame.get(0).contentDocument : subscriptionFrame.get(0).contentWindow.document;
subscriptionFrame.height(innerDoc.body.scrollHeight);   }

<iframe id="subscriptionFrame" onload="sizeIFrame();"></iframe>

誰でもこれについて考えがありますか?

4

2 に答える 2

1

修理済み!以下のように解決策:

function sizeIFrame() {
    var subscriptionFrame = jQuery("#subscriptionFrame");
    var innerDoc = (subscriptionFrame.get(0).contentDocument) ? subscriptionFrame.get(0).contentDocument : subscriptionFrame.get(0).contentWindow.document;
    if(innerDoc.body.scrollHeight==0)
        innerDoc.location.reload(true);
    subscriptionFrame.height(innerDoc.body.scrollHeight);   
}

これは、Firefox がサーバーではなくキャッシュから iframe コンテンツをロードするためです。したがって、xxx​​.location.reload(true) は、iframe コンテンツを強制的にキャッシュからロードします。それがあなたたちを助けることを願っています!=)

于 2012-09-20T07:45:50.853 に答える
1

ページの読み込みに時間がかかる場合 (キャッシュなし) に動作し、キャッシュが読み込まれると動作しないように聞こえるため、DOM 競合状態が発生している可能性があります。

属性の代わりにjQueryloadまたはイベントを使用してみてください。onloadjQuery は舞台裏で特殊なケースを処理するので、役立つかもしれません。

<iframe id="subscriptionFrame" onload="sizeIFrame();"></iframe>
<script type="text/javascript">
$('#subscriptionFrame').load(function()
{
    var subscriptionFrame = this;
    var innerDoc = (this.contentDocument) ? this.contentDocument : this.contentWindow.document;
    $(this).height(innerDoc.body.scrollHeight);    
});
</style>
于 2012-09-19T05:57:11.753 に答える