In a previous post I showed you how to center a div on screen regardless of if it was inside an iframe or not. This is the second version, which should work regardless of if the div is in the top level window, an iframe, or a regular frame.
/****************************************************************** Name: center Description: Center a div on page, no matter what! Author: AK (www.zeroedandnoughted.com) Date: 22nd April 2009 Version: 0.2 Dependencies: jQuery Notes: ******************************************************************/ (function($) { $.fn.center = function() { return this.each(function() { var $this = $(this); var frameXOffset = 0, frameYOffset = 0, windowHeight = 0, windowWidth = 0; //Are we in a frame? if (top.document != window.document) { var frm = $('iframe',top.document.body); if (frm.length == 0) { //regular frame frm = $('frame',top.document.body); } var i=frm.length; while (i--) { if (frm[i].contentDocument) { doc = frm[i].contentDocument; } else { doc = frm[i].contentWindow.document; } if (doc === document) { //located our frame! frameXOffset = $(frm[i]).offset().left; frameYOffset = $(frm[i]).offset().top; break; } }; if (jQuery.browser.msie) { windowWidth = top.window.document.documentElement.clientWidth; windowHeight = top.window.document.documentElement.clientHeight; } else { windowWidth = top.window.innerWidth; windowHeight = top.window.innerHeight; } } else { //we are not in a frame if (jQuery.browser.msie) { windowWidth = window.document.documentElement.clientWidth; windowHeight = window.document.documentElement.clientHeight; } else { windowWidth = window.innerWidth; windowHeight = window.innerHeight; } } var elHeight = $this.height(); var newTop = ((windowHeight/2) - (elHeight/2)) - frameYOffset + $(parent.document.documentElement).scrollTop(); if ((newTop + elHeight) > $(document).height()) { newTop = $(document).height() - elHeight; } $this.css ({ left: ((windowWidth/2) - ($this.width()/2)) - frameXOffset + $(parent.document.documentElement).scrollLeft(), top: newTop }); }); }; })(jQuery);