動的な数のiframeを含むページがあります。window.print()は、iframeがロードされたとき(つまり、srcがあるとき)に呼び出す必要があります。
衒学者になることなく、純粋なJavaScriptでこれをエレガントに処理するにはどうすればよいでしょうか。
動的な数のiframeを含むページがあります。window.print()は、iframeがロードされたとき(つまり、srcがあるとき)に呼び出す必要があります。
衒学者になることなく、純粋なJavaScriptでこれをエレガントに処理するにはどうすればよいでしょうか。
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
}
あなたができる
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が返されます。
それがあなたが望むものであるかどうかはよくわかりませんが、おそらくそれは役に立ちます:
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
がない場合src
、onload
イベントが発生することはないためです。
これはIEでは機能しないことに注意してください。jQueryと同等のものについては、SOでこの回答を参照してください$(document).ready
...