1

iframeにネストされている場合とされていない場合があるドキュメントでスクリプトが実行されています。ネストされたものを検出する問題を整理しましたが、iframeの場合にDOMの準備完了状態を検出する方法がわかりません。

これが私がすでに持っているものです:

if (window.self !== window.top) {
    // is nested
    // DOM ready test here
        // execute code here
} else {
    // is not nested
    $(document).ready(function() {
        // execute code here
    });
}

私はすでにこの投稿を読んでいますが、私の特定の質問に対する答えがわかりません。そこでの解決策を誤解している可能性があるので、遠慮なく訂正してください。


編集:これはFancyboxの問題のようです。このコード:

alert(document.getElementById('username').className);
document.getElementById('username').focus();

正しい値のアラートが表示されますが、フォーム要素がフォーカスを受け取りません。これは、DOMの準備完了状態の検出に問題がないことを示しています。私が使用しようとしていた元のスクリプトは次のとおりです。

$(document).ready(function() {
    $('input.focus:last').focus();
});

編集2/解決策:Fancybox固有の問題であると思われるため、Fancybox固有の解決策に頼らなければなりませんでした。これらのFancyboxiframedフォームの構成に次の行を追加しました。

'onComplete':function(){$('input.focus:last').focus();}
4

1 に答える 1

4

iframeBODYタグの最後にSCRIPTタグを配置できます。
次に、そこにコードを追加します。コードは、iframe本体が読み込まれたときに実行されます。

iframeのローカルJSコードを実行するか、次のように親のオブジェクトを呼び出すことができます。

<body>
  ...
  <script>
    parent.myObj.iframeLoaded(document.body);
  </script>
</body>

私の経験では、IEのonloadイベントは信頼できません。
つまり、iframe内のJSが読み込まれるのを待たずに起動します。

于 2010-02-01T22:23:15.067 に答える