Javascript 检测页面中的所有iframe是否都有src
我有一个带有动态数量iFrame的页面。加载iframes(即has src)时必须调用window.print() 如何在纯JavaScript中优雅地处理这一点而不显得迂腐?Javascript 检测页面中的所有iframe是否都有src,javascript,iframe,src,printing-web-page,Javascript,Iframe,Src,Printing Web Page,我有一个带有动态数量iFrame的页面。加载iframes(即has src)时必须调用window.print() 如何在纯JavaScript中优雅地处理这一点而不显得迂腐?函数getLoadedFrames(){ function getLoadedFrames () { var frames = document.getElementsByTagName( 'iframe' ), // Get all iframes loadedFrames = [], i;
函数getLoadedFrames(){
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
}
var frames=document.getElementsByTagName('iframe'),//获取所有iframe
加载帧=[],i;
对于(i=0;i0&&frames[i].src!==window.location.href){
加载帧。推(帧[i]);
}
}
return loadedFrames;//一个“已加载”帧的数组
}
你可以这样做
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,并返回true或false,以确定是否所有iFrame都定义了
src
。不太确定这是否是您想要的,但可能有帮助:
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();
};
}
});
window.addEventListener(“DOMContentLoaded”,function()){
//加载DOM后立即获取所有iFrame
var iframes=document.getElementsByTagName(“iframe”);
对于(变量i=0,l=iframes.length;i
这可以在不检查src
属性的情况下工作,因为如果iframe
没有src
,将永远不会触发onload
事件
注意,这在IE中不起作用;关于jQuery的
$(文档)的等价物,请参见on SO。准备好了吗?
..iFrame是否都在您的控制之下?或者其中的一些域是您不控制的?它来自外部源,不在我的控制之下。frames.reduce在Fx 15中返回错误?“Error:TypeError:frames.reduce不是函数”显然不是,但它是Firefox 15.0.1.Durr,我需要先使用Array.prototype.slice。FixedThanks,但为了支持IE,它变得有点迂腐;-)但在一般情况下,最好检查onload,因为我必须为每个iframe添加一些额外的加载时间,即使它有src。这也是我的想法。也许你应该考虑在这种情况下有点迂腐……重于if条件,但这是一个奇怪的问题,所以这是一个合理的解决方案。@凯文:有没有办法检查iframe是否有src……….如果(iframe_加载){do_nothing…}其他{加载iframe src}