Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测页面中的所有iframe是否都有src_Javascript_Iframe_Src_Printing Web Page - Fatal编程技术网

Javascript 检测页面中的所有iframe是否都有src

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;

我有一个带有动态数量iFrame的页面。加载iframes(即has src)时必须调用window.print()

如何在纯JavaScript中优雅地处理这一点而不显得迂腐?

函数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}