PDA

View Full Version : BUG FOUND: in Iframe SSI script II when refreshing page



karmakat
03-24-2006, 08:18 AM
Script: Iframe SSI script II
http://www.dynamicdrive.com/dynamicindex17/iframessi2.htm
---------------------------------------------------------------------

Hi all, I am new to these forums, so allow me to introduce myself...
I'm aleks, 3d artist, web designer until i get that dream job...

I've discovered a bug in Iframe SSI script II (http://www.dynamicdrive.com/dynamicindex17/iframessi2.htm) when refreshing page! :( :( :(
I love this script... except...
sometimes when the page is refreshed, it doesn't work properly.
the iframe loses its assigned properties, gets a scrollbar, and doesn't cause the main scrollbar to resize itself.

check out my page and see for yourself.. refresh a couple of times and you will see

http://www.beautification.ca/content

help with this nasty bug would be much appreciated as its yet another stumbling block in what is a totally cursed website.

thanks guys

-aleks aka karmakat

karmakat
03-24-2006, 08:43 AM
Script: Iframe SSI script II
http://www.dynamicdrive.com/dynamici...iframessi2.htm
---------------------------------------------------------------------
I thought i had fixed this but I was wrong:mad:
It seemed to help but i am still having the problem....

What I tried:

In the last line before the script ends there is the line:


window.onload=resizeCaller

add this below:


window.onUnload=resizeCaller


Aleks aka KarmaKat
http://www.karmakat.ca

jscheuer1
03-24-2006, 04:40 PM
Does this happen on the demo page? If not, it probably has something to do with your markup.

karmakat
03-24-2006, 07:26 PM
yes, I have been able to 'recreate' the error in both firefox and IE
on the demo page.

refresh a bunch of times until you notice the first example iframe just doesn't appear. I believe this is a symptom of the same bug i encountered.

On my site, it may help to notice that this error happens most often if you go to section using the flash menu, and then refresh. ie.. if you load new content into the iframe and then refresh.

If anyone can tell whats happening by looking at my code, please do let me know as this is a fatal flaw in my website (http://beautification.ca/content/index.html):

index.html
___________________________

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">

/***********************************************
* IFrame SSI script II- &#169; Dynamic Drive DHTML code library (http://www.dynamicdrive.com)
* Visit DynamicDrive.com for hundreds of original DHTML scripts
* This notice must stay intact for legal use
***********************************************/

//Input the IDs of the IFRAMES you wish to dynamically resize to match its content height:
//Separate each ID with a comma. Examples: ["myframe1", "myframe2"] or ["myframe"] or [] for none:
var iframeids=["myframe"]

//Should script hide iframe from browsers that don't support this script (non IE5+/NS6+ browsers. Recommended):
var iframehide="no"

var getFFVersion=navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1]
var FFextraHeight=parseFloat(getFFVersion)>=0.1? 16 : 0 //extra height in px to add to iframe in FireFox 1.0+ browsers

function resizeCaller() {
var dyniframe=new Array()
for (i=0; i<iframeids.length; i++){
if (document.getElementById)
resizeIframe(iframeids[i])
//reveal iframe for lower end browsers? (see var above):
if ((document.all || document.getElementById) && iframehide=="no"){
var tempobj=document.all? document.all[iframeids[i]] : document.getElementById(iframeids[i])
tempobj.style.display="block"
}
}
}

function resizeIframe(frameid){
var currentfr=document.getElementById(frameid)
if (currentfr && !window.opera){
currentfr.style.display="block"
if (currentfr.contentDocument && currentfr.contentDocument.body.offsetHeight) //ns6 syntax
currentfr.height = currentfr.contentDocument.body.offsetHeight+FFextraHeight;
else if (currentfr.Document && currentfr.Document.body.scrollHeight) //ie5+ syntax
currentfr.height = currentfr.Document.body.scrollHeight;
if (currentfr.addEventListener)
currentfr.addEventListener("load", readjustIframe, false)
else if (currentfr.attachEvent){
currentfr.detachEvent("onload", readjustIframe) // Bug fix line
currentfr.attachEvent("onload", readjustIframe)
}
}
}

function readjustIframe(loadevt) {
var crossevt=(window.event)? event : loadevt
var iframeroot=(crossevt.currentTarget)? crossevt.currentTarget : crossevt.srcElement
if (iframeroot)
resizeIframe(iframeroot.id);
}

function loadintoIframe(iframeid, url){
if (document.getElementById)
document.getElementById(iframeid).src=url
}

if (window.addEventListener)
window.addEventListener("load", resizeCaller, false)
else if (window.attachEvent)
window.attachEvent("onload", resizeCaller)
else
window.onload=resizeCaller
window.onUnload=resizeCaller
</script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="style2.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="wrapperbox">
<div class="centeredbox">
<p align="center">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="730" height="569">
<param name="movie" value="home.swf" />

<param name="quality" value="high" />
<embed src="home.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="730" height="569"></embed>
</object>
</p>
<div class="centeredbox2" id="framediv">
<div align="center">
<script language="javascript">
// writes in the iframe
var contPage = (location.search.substring(1))? location.search.substring(1) : 'index.php';

var myDomain = "beautification.ca";
// now check to see that myDomain is part of the content page string
var contValid = contPage.search(myDomain);

if (contValid == -1)
contPage = "index.php";
else
contPage = unescape(contPage);

document.write('<center>');
document.write('<iframe id="myframe" src="'+contPage+'" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" vspace="0" hspace="0" style="overflow:visible; width:100%; display:none');
document.write('</iframe>');
document.write('</center>');
</script>
</div>

</div>
<p align="center">&nbsp; </p>
</div>
</div>

</body>
</html>

Just so you know, the second javascript 'session' is for catching pages outside of the frameset and redirecting....

Please help! thanks!

-aleks

jscheuer1
03-25-2006, 12:49 AM
I refreshed the demo about 25 times, no problems.

karmakat
03-25-2006, 08:38 AM
well i dunno... it happens on my site for you does it not?
try loading something into the iframe and then refresh....

What else could it be?

jscheuer1
03-25-2006, 02:16 PM
well i dunno... it happens on my site for you does it not?
try loading something into the iframe and then refresh....

What else could it be?

Well, which is it? The point of the question was to help determine if the problem is relative to your computer or to your page or to the script itself. So, do you get the error on the demo page or not, it is fine with me if you do, I just didn't happen to experience it and got tired trying. I did see a problem on your page. Here is the error reported:



from FF1.5.0 javascript console:

Error: [Exception... "'Permission denied to get property HTMLDocument.body' when calling method: [nsIDOMEventListener::handleEvent]" nsresult: "0x8057001e (NS_ERROR_XPC_JS_THREW_STRING)" location: "<unknown>" data: no]

This means the script thinks that the iframe content page is not from the same domain as the top page. If it is not, there is nothing you can do. If it is on the same domain, you need to find a way to convince the script of that fact. There may be a setting somewhere in your site's setup that reports a different DNS for the site than the top page is using. This is the reported address of one of your iframe pages:


http://karmakat.ca/beautification/content/index.php?option=com_content&task=view&id=25&Itemid=38

clearly a different DNS than the top page's:


http://www.beautification.ca/content/

In fact, if I link to this as the top page:

http://karmakat.ca/beautification/content/index.html

everything works fine.