2

動的な数のiframeを含むページがあります。window.print()は、iframeがロードされたとき(つまり、srcがあるとき)に呼び出す必要があります。

衒学者になることなく、純粋なJavaScriptでこれをエレガントに処理するにはどうすればよいでしょうか。

4

3 に答える 3

1
function getLoadedFrames () {

    var frames = document.getElementsByTagName( 'iframe' ), // Get all iframes
        loadedFrames = [], i;

    for ( i = 0; i < frames.length; i++ ) {
        /*
            If iframe has a src attribute, that attribute has a value AND
            that value is not equal to the current window location (leaving src
            blank seems to return the current location instead of empty string)
            then add the frame to the loadedFrames array.
        */
        if ( frames[ i ].src && frames[ i ].src.length > 0 && frames[ i ].src !== window.location.href ) {
            loadedFrames.push( frames[ i ] );
        }
    }

    return loadedFrames; // An array of your 'loaded' frames
}
于 2012-10-05T21:22:37.350 に答える
0

あなたができる

function areAllIframesLoaded() {
  var frames = document.getElementsByTagName( 'iframe' )
  return Array.prototype.slice.call(frames).reduce(function(p, c) {
    return p && c.src && c.src.length > 0 && c.src !== window.location.href
  }, true);
}

これにより、すべてのiframeが繰り返され、すべてのiframeにsrc定義があるかどうかについてtrueまたはfalseが返されます。

于 2012-10-05T21:27:03.000 に答える
0

それがあなたが望むものであるかどうかはよくわかりませんが、おそらくそれは役に立ちます:

window.addEventListener("DOMContentLoaded", function(){
    // Get all iframes as soon as DOM has loaded
    var iframes = document.getElementsByTagName("iframe");
    for (var i = 0, l = iframes.length; i < l; ++i) {
        // Add event handler to every iframe
        iframes[i].onload = function(){
            // Execute window.print() when iframe has loaded
            window.print();
        };
    }
});

srcこれは、属性をチェックせずに機能します。これは、にiframeがない場合srconloadイベントが発生することはないためです。

これはIEでは機能しないことに注意してください。jQueryと同等のものについては、SOでこの回答を参照してください$(document).ready...

于 2012-10-05T21:27:25.093 に答える