Bug Tracker

Ticket #3367: offset-bug.patch

File offset-bug.patch, 1.9 KB (added by dezfowler, 14 years ago)

SVN patch fixing bug

  • offset.js

     
    8282                                        Math.max(doc.documentElement.scrollTop,  doc.body.scrollTop));
    8383                }
    8484
     85                // test whether the owner doc of our element is in an iframe
     86                if ( window.document !== doc ){
     87                        var oF;
     88                        // some broswers support the document.defaultView and window.frameElement properties
     89                        if(typeof(doc.defaultView) != 'undefined' && typeof(doc.defaultView.frameElement) != 'undefined'){
     90                                oF = doc.defaultView.frameElement;
     91                        }
     92                        else {
     93                                // we aren't able to shortcut to the frame element so search for it
     94                                oF = findTheFrame.call(window, doc);
     95                               
     96                                // add a defaultView and frameElement
     97                                doc.defaultView = oF.contentWindow;
     98                                if(typeof(doc.defaultView.frameElement) == 'undefined') doc.defaultView.frameElement = oF;
     99                        }
     100                       
     101                        //if(oF === null) throw 'bad';
     102                        var frameOff = jQuery.fn.offset.call( [oF] );
     103                        add(frameOff.left, frameOff.top);
     104                }
     105
    85106                // Return an object with top and left properties
    86107                results = { top: top, left: left };
    87108        }
     
    95116                top += parseInt(t, 10) || 0;
    96117        }
    97118
     119        // helper function to recursively find the iframe containing the supplied document
     120        function findTheFrame(doc){
     121                var toReturn = null;
     122                var iframes = this.document.getElementsByTagName('iframe');
     123                // loop through all the iframes in the current document
     124                for(var x = 0; x < iframes.length; x++){
     125                        // if this is the right iframe its document will match the document we're looking for
     126                        if(iframes[x].contentWindow.document === doc){
     127                                toReturn = iframes[x];
     128                        }
     129                        else {
     130                                // recurse into the iframe's window and check any nested iframes
     131                                toReturn = findTheFrame.call(iframes[x].contentWindow, doc);
     132                        }
     133                        if(toReturn !== null) break;
     134                }
     135                return toReturn;
     136        }
     137
    98138        return results;
    99139};
    100140