0

私はこのコードを持っていました:

var frames = document.getElementsByTagName("iFrame");
var auto_resize_timer = window.setInterval("autoresize_frames()", 400);
function autoresize_frames() {
    for (var i = 0; i < frames.length; ++i) {
        if (frames[i].contentWindow.document.body) {
            var frames_size = frames[i].contentWindow.document.body.offsetHeight;
            if (document.all && !window.opera) {
                frames_size = frames[i].contentWindow.document.body.scrollHeight;
            }
            frames[i].style.height = frames_size + 'px';
        }
    }
}

それはうまくいきました。

次に、それを独自のモジュールに入れることにしました。

function autoResizeFrames() {
    var frames = document.getElementsByTagName("iFrame");
    window.setInterval("autoresize_frames(frames)", 400);
}

function autoresize_frames(frames) {

    for (var i = 0; i < frames.length; ++i) {
        if (frames[i].contentWindow.document.body) {
            var frames_size = frames[i].contentWindow.document.body.offsetHeight;
            if (document.all && !window.opera) {
                frames_size = frames[i].contentWindow.document.body.scrollHeight;
            }
            frames[i].style.height = frames_size + 'px';
        }
    }
}

そして、次のようにページで実行します。

<script type="text/javascript">

    $(document).ready
(
     function () {
         autoResizeFrames();
     }

    );

</script>

しかし、今は機能しませんか?なぜ何かアイデアはありますか?

ありがとう

4

3 に答える 3

1

実行する場合:

    window.setInterval("autoresize_frames(frames)", 400);

基本的evalに、ウィンドウのコンテキストでコードを実行しています。setIntervalを使用する場合は、文字列ではなく関数への参照を渡す必要があります。なぜevalが悪いのかを読むことができますなぜJavaScripteval関数を使うのは悪い考えですか?

通常は次のようにします。

    window.setInterval(autoresize_frames, 400);

ただし、関数が引数を取る場合は、関数でラップする必要があります。

以下が機能します。

window.setInterval(function() {
  autoresize_frames(frames);
}, 400);
于 2013-02-21T15:27:37.743 に答える
0

独自の関数では、「フレーム」は内部で宣言されます。「var」キーワードを削除して、グローバル変数になるようにしてみてください。

于 2013-02-21T15:26:44.690 に答える
0

framessetInterval内でアクセスできない可能性のある変数に問題がある可能性があると思います。あなたはこれを試すことができます

function autoResizeFrames() {
    window.setInterval(function(){
         autoresize_frames(document.getElementsByTagName("iFrame"))
    }, 400);
}
于 2013-02-21T15:30:44.413 に答える