Home

Show Frames

Source code for bookmarklet Show Frames.



javascript:
(function(){
    
    function cE(a)
    {
        var a2 = [];
        for (var k = 0; k < a.length; ++k) {
            a2.push(a[k]);
            }
        return a2;
    }
    var g_frame_count = 0;
    var iframe_count = 0;

    function eD(dt, f) {
        if (f != null) {
            ++g_frame_count;

            var bod = dt.getElementsByTagName("BODY")[0];
            if (bod != null)
            {
                bod.style.border = "thin dashed red";
                bod.title = "Frame " + g_frame_count + ": " + (f.name || f.src);
            }

        }
        var ifrs = cE( dt.getElementsByTagName("IFRAME") );
        iframe_count += ifrs.length;
        for (var k = ifrs.length, i = 0; i < k; ++i )
        {
            var ifr = ifrs[i];
            ifr.style.border = "thin dashed blue";
            ifr.title = "Iframe " + (ifr.name || ifr.src);
        }
    }


    // "dIr" == "documentIterator"
    function dIr(dt, f) {
        function ifsr( fs )
        {
            for (var i = 0; i < fs.length; ++i)
            {
                try {
                    dIr(fs[i].contentDocument, fs[i]); // recursive call
                }
                catch (e) {
                    alert(e || "Unspecified error");
                }
            }
        }

        if (dt == null) {return;}
        eD(dt, f);
        ifsr( dt.getElementsByTagName("FRAME") );
        ifsr( dt.getElementsByTagName("IFRAME") );
    }

    // iterate through all documents
    dIr(document, null);

    var st = "";
    if (g_frame_count == 0 && iframe_count == 0)
    {
        st = "No frames";
    }
    else
    {
        st += "Frames: " + g_frame_count;
        st += ". | IFRAME: " + iframe_count;
    }
    alert(st + ".");
}());