Closed Bug 22681 Opened 25 years ago Closed 21 years ago

Unable to alter content of dynamically created IFRAMEs

Categories

(Core :: Layout: Images, Video, and HTML Frames, defect, P3)

defect

Tracking

()

RESOLVED WORKSFORME

People

(Reporter: svn, Assigned: jst)

References

()

Details

(Keywords: relnote, Whiteboard: [Hixie-P2] [nsbeta3-] relnote-devel)

Attachments

(2 files, 1 obsolete file)

IFRAME elements created dynamically using DOM do not behave properly

Platforms: Linux (RedHat6.1), Solaris 2.6

Mozilla releases: M12, Dec 26 daily build

Possibly related to bug 16385

I have been trying to use dynamically created IFRAME elements for my terminal
emulator component (the code is in mozilla/extensions/xmlterm). What I'm
trying to do is to create IFRAMEs using the CreateElement method of a
DOMDocument that has already been loaded, and then insert content into the
IFRAMEs dynamically. When I test my content insertion code using static
IFRAMEs, i.e., IFRAMEs embedded in a test HTML document, everything works
fine. However, when I try to create IFRAMEs on the fly, things don't work
properly. I have tried two approaches, both of which fail:

I. (Easily reproducible)
   Load about:blank initially in the IFRAME and then try to write to the
   IFRAME using its window.document.write() method. This fails for
   dynamically created IFRAMEs because the window.document object is null.
   I have created a simple HTML file with Javascript that reproduces this
   error. It is available in the URL
   <http://xmlterm.com/dyn_iframe.html>
   Loading the above URL in Mozilla results in the following error
   message on the console:
     JavaScript Error: TypeError: ifr.document has no properties
     URL: http://xmlterm.com/dyn_iframe.html
     LineNo: 27

   Interestingly, this error does not occur in older milestone releases
   of Mozilla, such as M9 or earlier.

II. (Not easily reproducible)
   The second approach is more involved and uses an InputStreamChannel
   to modify the IFRAME's content dynamically (the code is in
   mozilla/extensions/xmlterm/base/mozXMLTermStream.cpp). It would not be
   easy for someone else to reproduce the errors that I encounter in trying
   to use this approach, but basically what happens is that I dont' get any
   explicit error message. The dynamic content that I insert appears to be
   rendered, because I keep track of the page size, but is not visible at all.
   All I get is a blank IFRAME in the end, but of the right width and height!
Assignee: karnaze → pollmann
Reassigning to Eric.
Accepting bug and setting milestone to M19.
Status: NEW → ASSIGNED
Target Milestone: --- → M19
Bumping up milestone and severity based on number of votes this bug has
received.
Severity: normal → major
Target Milestone: M19 → M17
I recieved the same error message using the test page on Windows 98 with build 
id 2000062108.
The problem in this case seems to be that GlobalWindowImpl::SetNewDocument is 
called *after* GetDocument.  This means that the iframe's document is loading 
after we're trying to access it here.  Setting the new document looks to be an 
asynchronous operation, possibly on another (netlib) thread.

One nifty thing to do here might be to ensure that a document always exists for 
a window, and not wait until we start getting bits off the network (or in this 
case from the file stream for about:blank).  This might also take care of bug 
5569 and also be a cleaner way to handle bug 35986.

CC'ing Adam
The same example is returning the document object of the dynamicaly created 
iframe 'null' even if you set the SRC attribute to point a particular html page.
Bug is not just for SRC='about:blank'. For the future fix, I recommend the 
testing of the accesiblity of document objects for the nested iframes as well.

Hope to see this bug fixed in M17.
Another related misbehaviour for dynamically created iframes; It is not just 
the document object is being set empty. If you specify a target src html and 
put some javascript functions into it. Accessing to those function thru a 
Dynamically created iframe is not possible. However, if you create an frame 
statically in the body tag using the same src html, then it is all fine.

dynamically created iframes are missing everthing except styles and attributes.
Nominating for beta3 based on number of votes and feature completeness for
dom/html4
Keywords: correctness, nsbeta3
Marking nsbeta3-
Keywords: relnote
Whiteboard: [nsbeta3-]
Moving bug marked nsbeta3- to Future milestone.
Target Milestone: M17 → Future
May I ask why this annoying bug was tagged future suddenly? it has been 5 
milestones already since then. On the other hand, all the iframe bugs are 
tagged future in bugzilla? has the person responsible for iframes quit working 
with you?
Whiteboard: [nsbeta3-] → [nsbeta3-] relnote-devel
Nominating for mozilla0.9. Pollmann - any chance of revisiting this? It's
blocking the development of a significant feature in XMLTerm, which is a very
cool XML-aware xterm application.

Gerv
Keywords: mozilla0.9
It has been almost a year since this bug was reported and nothing has happened. 
This is not acceptable. Instead of fixing DOM level 1 bugs you are extending 
Mozilla with XUL and XNL. Don't get me wrong, I like XUL and XBL, but I think 
DOM should have a higher priority than proprietary extensions.

I think this bug should have a higher priority than 3...

Set milestone to mozilla0.9
Target Milestone: Future → mozilla0.9
I was wondering if this bug will be fixed as targeted on mozilla0.9? The reason 
I am asking it has been tagged 'future' couple of times back and halted our 
development which needs this feature. 

thanks,
*** Bug 51281 has been marked as a duplicate of this bug. ***
This bug has serious ramifications for the internet ad industry as a whole.  
There are literally 1000s of AdMasters that traffic ads using document.write 
in some part of the ad definition every day.  We have long waited for Mozilla to 
support IFRAMEs to simplify RichMedia ad delivery (consider what it takes to use 
SCRIPT SRC).  

The industry standard ad tag has the following form:

<IFRAME SRC=>
<SCRIPT SRC=>
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</IFRAME>

Since there are literally Gpages with these tags (After all ad delivery is 
probably the single biggest financial driver on the internet), everyone is now 
faced with the prospect of users hitting their pages with Mozilla and having ads 
break.  We can't stop Mozilla from using IFRAME and there is no way we are going 
to stop using IFRAME, which leaves us with the only option: every one of these 
ads needs to make an exception and deliver a gif or something in the case of 
Mozzila...talk about wasted man hours.

This is not a P3 bug.  It is a P1 with the entire internet economy behind it.
As this bug has major implications for the Internet advertising industry I think
it would be great to see the likes of doubleclick contribute resources to fix
this. If you've got suitable coders inhouse then you could assign coders to
fixing this, if you haven't then you could contract out the work or get some
company that offers this service (e.g. beonex.com) to do so.

It'd also be good PR for doubleclick saying that they're not particularly
popular in some circles for their ad tracking (never bothers me tho). It would
also guarantee that this would be fixed. That's the great thing about open
source if you want something fixed that badly and you've got the resources to
fix it then you can.
Nominating for nsbeta1 consideration. Want dynamically generated content to 
work the same as static content. Plus, we have evidence of actual customer 
impact. As noted by previous poster, would be great if DoubleClick et al would 
contribute an engineer to work on this--or at least QA resources to help verify 
if they can't contribute an engineer.
Keywords: nsbeta1
I do not think you will have any problem on QA side. There will be many people
(including me) testing dynamic iframe's functionality. On the other hand, as I 
see you are still looking for engineers to help on this; I do not believe 
anybody could catch up with Mozilla source tree that quick. Obviously, this bug 
is not going to make the mozilla0.9 seeing the nightlies so far. If Eric is too 
busy or overburdened, may be it is likely that you should ask another engineer 
familiar with mozilla source tree to take this over. My personal observation is 
that you shouldnt extend mozilla with features full of bugs just to say that it 
has those features. It is ,to me, waste of valuable man and brain power. 
Mozilla team should perfect the core DOM and layout first then fixing those 
extensions up will not be that painful.
The problem appears to be that the IFRAME is not added to the list of children 
of the docshell until the next reflow occurs. In the meantime, the javascript 
tries and fails to find it from the collection.

If we could force an immediate reflow when child frames are appended it should 
sort this problem out.
Not that I have the first clue about this or anything, but...

That doesn't strike me as an optimal solution. A reflow is an expensive
operation, and if js is going to be modifying the content of the iframe then
another reflow will have to be done afterwards too. Performing a reflow just to
add a child to the docshell sounds like a waste of processing time - how hard
would it be to add the iframe into the docshell at creation time rather than at
reflow time?
Setting milestone to mozilla0.9.1
Target Milestone: mozilla0.9 → mozilla0.9.1
Well! isnt there a quick nasty fix for this bug. I wouldnt mind reflowing 
either. Something working ,until you guys get it all redone, would really help 
people developing on mozilla. At least, people who needs dynamic Iframes could 
make their development parallel. And we can at least say "here we go our 
product is also working on all mighty mozilla but we are still waiting for some 
bugs to be fixed". Cant you put a very nasty HACK/WORKAROUND for this bug to be 
working for now? 

just a thought.
QA Contact update
QA Contact: petersen → amar
Just wanted to add that if a frame is added using DOM with display: none then 
the frame is not added to the frames collection.
Target Milestone: mozilla0.9.1 → mozilla0.9.3
Doesn't look like this is getting fixed before the freeze tonight.
Pushing out a milestone.  Please correct if I'm mistaken.
Target Milestone: mozilla0.9.3 → mozilla0.9.4
Here's the activity log of target_milestone changes:
2000-04-10 15:28:56 ... M19          
2000-04-10 15:33:39 ... M17          
2000-08-15 18:55:59 ... Future       
2000-12-20 14:48:04 ... mozilla0.9   
2001-03-01 15:32:37 ... mozilla0.9.1 
2001-05-15 12:16:56 ... mozilla0.9.3 
2001-07-24 14:54:43 ... mozilla0.9.4

Maybe the use of target_milestone values should be rethought...
I believe it is time to tag this bug as 'FUTURE'. The fact that it has 26 votes 
on it shouldnt make you push this bug incrementally to the next milestone. That 
aint making any phychological relief, believe me! 

Yes, this is a major bug.

Since Mozilla doesn't allow DIV's to be positioned over IFRAMEs (Bug 91516), 
positioning an IFRAME over an IFRAME is the only workaround left.

This bug prevents to use such a workaround in a clean way.
The display:none problem that Erik mentioned makes it even worse.
(Erik, could you file a new one for that?)

We use such functionality (in IE5+) for a menuing system that overlays the page 
contents in various DHTML database frontends.

Apart from that, it's a pretty blatant DOM1 incompatibility.
This is futile! We have just dropped mozilla support, and do not think of 
supporting it in future either because of this bug! I would like my account 
deleted from bugzilla; I looked around for the link to delete my account, but 
there is none. I think, I will just turn off all the email check boxes from 
prefrences.

Good luck to all the developers and best wishes for a succesful Mozilla.


Signing off.
Bora
You are not the only one who has dropped support for Mozilla. However once 
Mozilla gets to 1.0 I might actually reconsider trying to get some simple 
DHTML/DOM applications to work. I've still not totally given up and I think 
that the current state of the DOM in Mozilla is a good start. I just hope that 
AOL realize that it is just a start and that a lot of development on the DOM 
front is still needed.
Whiteboard: [nsbeta3-] relnote-devel → [Hixie-P2] [nsbeta3-] relnote-devel
eric is no longer around.  
we need some more time to figure out who can own this bug.
anybody have ideas?

unlikley this will make 0.9.4
Target Milestone: mozilla0.9.4 → mozilla0.9.5
*** Bug 61468 has been marked as a duplicate of this bug. ***
*** Bug 88291 has been marked as a duplicate of this bug. ***
*** Bug 92557 has been marked as a duplicate of this bug. ***
*** Bug 100616 has been marked as a duplicate of this bug. ***
This bug is having a critical impact on my place of business. We have clients 
wanting to use Netscape 6.1 (build 20010726 of Mozilla) because "their computer 
crahsed and they thought why not get the newest version of Netscape".  We 
create framed page dynamically and write to the left frame and get the right 
frame back from the server.  It's so wonderful that we use it for most of our 
applications on the web.  Now we have not choice but to force them to use IE 
5.0 or Netscape 4.7x.  It looks like this hasn't been touched in a couple of 
months.  Any chance it's being worked on?  Also...wouldn't Netscape want to 
cough up the resources to fix this since it's in their latest and greatest 
browser?
This bug is misassigned -- pollmann doesn't hack on Mozilla any longer.  jst,
are you willing to take this?

/be
I'll take this for now, not sure when I'll get to it tho...
Assignee: pollmann → jst
Status: ASSIGNED → NEW
OS: Linux → All
Hardware: PC → All
Target Milestone: mozilla0.9.5 → mozilla0.9.6
Blocks: 104166
Blocks: 105405
Pushing to mozilla0.9.7
Target Milestone: mozilla0.9.6 → mozilla0.9.7
Maybe to help pinpoint this problem (or add to the description detail)...it does
seem to be possible to write content to a dynamically-created iframe, BUT ONLY
with a separate event.  That is, if I have a separate button with an onClick
event that calls a function to populate content to the dynamically-created
iframes, it will work.  However, if I call the function from within another
function, it fails to write to the iframes.  
Also, I'd just like to add that the team I am on is developing an application
for a 45,000 employee company that will be used world-wide by employees and
vendors.  We NEED this functionality, and are still deciding whether or not to
support both IE and Netscape in our first release.  While we do have a clumsy
work-around for now, we would like to know whether this bug is expected to be
fixed in the next NN release, as this will determine the direction of our
development.  
A fix is coming in bug 88229, it's very close.
Test case (I) (in this bug's first comment) works now. (Well, except there's a 
bug in the test case source you wouldn't have noticed until now. Hee hee.)
I was excited for a second! Is the fix checked in to 0.9.6? It is still not 
working(I, of course, corrected the code and run)? same error 'ifr has no 
properties' using mozilla build ID 2001112009...Damn are you sure the 
attachment is working now?
WOW, it is really working. I used the latest build. 

Excellent Job Dan,



Anyone know which release of Netscape this might show up in?
"The next one". No-one will be allowed to tell you when that will be, even if
they knew.
Yes, this should be in the next major Netscape release (i.e. probably not in
Netscape 6.2.x), as I'm sure guessed, I can't give out a version number or a
release date.
I have created some nested iframes dynamically inside a dynamically created 
iframe. But, I can not access to the document of nested frames. Here are the 
exceptions thrown.

Error: [Exception... "Component returned failure code: 0x80004005 
(NS_ERROR_FAILURE) [nsIWebProgress.DOMWindow]"  nsresult: "0x80004005 
(NS_ERROR_FAILURE)"  location: "JS frame :: 
chrome://navigator/content/nsBrowserStatusHandler.js :: anonymous :: line 202"  
data: no]
Source File: chrome://navigator/content/nsBrowserStatusHandler.js
Line: 202

Error: uncaught exception: [Exception... "Component returned failure code: 
0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMNSHTMLDocument.open]"  
nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" ]

Error: [Exception... "Component returned failure code: 0x80004005 
(NS_ERROR_FAILURE) [nsIWebProgress.DOMWindow]"  nsresult: "0x80004005 
(NS_ERROR_FAILURE)"  location: "JS frame :: 
chrome://navigator/content/nsBrowserStatusHandler.js :: anonymous :: line 231"  
data: no]
Source File: chrome://navigator/content/nsBrowserStatusHandler.js
Line: 231
It's because they're accessing it as window.frames which is a window object. And
window objects do have a document member.
Dynamically created nested iframes are again empty shells. The problem we had 
with this bug remains for the nested iframes. danm@netscape.com may have a easy 
fix for this since he fixed the head of the problem.
Target Milestone: mozilla0.9.7 → mozilla0.9.8
Target Milestone: mozilla0.9.8 → mozilla0.9.9
*** Bug 35250 has been marked as a duplicate of this bug. ***
Pushing out to mozilla1.1.
Target Milestone: mozilla0.9.9 → mozilla1.1
Keywords: mozilla1.0+
Doesn't this mean that Moz1.0 will NOT be DOM1 compliant?

IMHO this means that document.createElement("IFRAME") does not work correctly 
and therefore DOM1 is not supported. Therefore 
document.implementation.hasFeature("HTML", "1.0") should not return true like 
it currently does.
Erik, the original bug is fixed. Only the edge case of nested iframes will show
this bug. And in any case, I'd be the happiest man on earth if this bug was the
very last issue we had to fix for DOM1 compliance. That should definitely not be
an argument to require that this bug be fixed for 1.0. 
Following your logic, hasFeature() would be more than useless because no browser
is entirely DOM1 compliant, so all the browsers should return false.
We'll review the hasFeature() implementation for 1.0 anyway, you can make
yourself heard on that issue in bug 30534
danm wasn't cc'ed, but someone uttered his name reverently.  Cc'ing him.

/be
Keywords: mozilla1.0+mozilla1.0-
Attached file Severe Problem with dynamic iframe (obsolete) —
>>the original bug is fixed. Only the edge case of nested iframes will show
>>this bug.

Unfortunately, this is a comment made without proper testing of the presumed
'FIXED' portion of the bug. Although we can create a dynamic Iframe and set the
SRC successfully, we are unable to add not only other Iframes(nested iframes)
but any other elements as well. Please check the new attachment. The Dynamicly
created  Iframes are dead zombies; however, we can reach to their document
object successfully. There must be a little something left behind for 'the
original bug'.
Sorry for the spam and please ignore the previous additions I made. It is now
working???? I will make further tests.

Sorry again
SPAM - SPAM sorry sorry. After loading the attachment it works for the first
time then hit the refresh button, then the 'hear you' text will disappear.

thanks and sorry
I am not having problems on refresh.

However, there is some other strange behaviour. Visiting attachment id 82920
("Severe Problem with dynamic iframe") seems to screw up the history, listing
itself as both the current page and the previously viewed page (as shown under
the Go menu or the context menu on the Back button).

The problem of "Hear you" not being written again IS experienced when going back
to a previously viewed page (like this one) and then revisiting the attachment
by going forward in the history.

[Note: IANAMH (I Am Not A Mozilla Hacker), so the following is just a bunch of
potentially way off-base theory]
Visiting pages using one's history displays cached versions of the page usually,
so I suspect the problem here is really about how/whether Mozilla caches
dynamically modified versions of a page. Is it supposed to be only caching the
initial, static stuff and reexecuting any dynamic javascript code when viewed
again, using the cached version as a base?
Target Milestone: mozilla1.1alpha → ---
Comment on attachment 82920 [details]
Severe Problem with dynamic iframe

This is no longer a problem with latest builds
Attachment #82920 - Attachment is obsolete: true
Is this bug stil reproducable? The attached testcases seems to have some js
errors? The testcases in the dupes works fine. Build 2003032204.

Can anyone verify?
Still exist in FireBird 0.6.1 (20030827) or Mozilla 1.3b but not in FireBird 0.5.
Example at http://home.planetinternet.be/~pbajoit/Genealogie/genealogie.htm
where 6 IFRAMEs exist, the first one and the last one are good, the 2nd to the
5th are empty.
Philippe, those iframes in the url are not dynamically created.
OK, practically there are 6 IFRAMEs (not dynamically created), the content of
all is dynamically generated by using JavaScript:

I assign a source to an IFRAME with ID "ascendance":
document.getElementById("ascendance").src = "ascendance.html?id=" + n;

In "ascendance.html" I build the HTML:
<body>
<script language="javascript" type="text/javascript">
<!--
document.writeln("<table cellspacing='1' width='100%'>");
...

The problem is different and amazing between Phoenix 0.5 and Firebird 0.6: in
the HTML

<IFRAME FRAMEBORDER="0" MARGINWIDTH="1" MARGINHEIGHT="1" WIDTH="100%"
HEIGHT="150" ID="fiche" SRC="blank.htm">
Your browser does not support IFRAME !
</IFRAME>
<IFRAME FRAMEBORDER="0" MARGINWIDTH="1" MARGINHEIGHT="1" WIDTH="100%"
HEIGHT="100" ID="ascendance" SRC="blank.htm">
Your browser does not support IFRAME !
</IFRAME>

the IFRAMEs are placed on top of each other, only the first one being visible.
Simply adding a <BR> between the IFRAMEs forces them to have a different location.

I understand it is not a bug about 'Unable to alter content of dynamically
created IFRAMEs' and I should check W3C standards because to qualify this
behavior of bug or feature.
Sounds like a regression.  Wonder if dbaron or bz know of it already.  Can
someone narrow it down in a Mozilla (SeaMonkey) milestone, or even nightly,
build?  The interval between Phoenix 0.5 and Firebird 0.6 was quite long.

/be
http://home.planetinternet.be/~pbajoit/Genealogie/genealogie.htm renders 
identically in IE 5.5 and Mozilla 1.5b on Windows 98 over here.

In any case, as comment 71 says, that's not this bug.

As for this bug... the first testcase posted here works in current builds.  The 
second testcase is fundamentally flawed, since it assumes that document loads 
are synchronous -- they are not.

The third testcase also works with current builds.

I'm marking this bug worksforme.  Philippe, if you can reproduce your problem 
with a 1.5b SeaMonkey build or equivalent Firebird nightly, please file a bug 
on it and cc me; that will let us work on that problem without carrying around 
the baggage of 70-some comments on a totally different topic.
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → WORKSFORME
Product: Core → Core Graveyard
Component: Layout: HTML Frames → Layout: Images
Product: Core Graveyard → Core
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: