Closed
Bug 111943
Opened 22 years ago
Closed 18 years ago
document.styleSheets not updated when a link element is appended to the head element
Categories
(Core :: DOM: CSS Object Model, defect)
Tracking
()
RESOLVED
FIXED
People
(Reporter: martin.honnen, Unassigned)
References
Details
Attachments
(3 files)
I check document.styleSheets.length after I create and insert a link element and it always comes up one too low, that is after the first style sheet is added document.styleSheets.length is 0, then when the second style sheet is added document.styleSheets.length is 1. Although it seems the document is reloaded when the link element is inserted the body onload event doesn't fire. Thus there is no way for the scripter to know when the style sheet is accessible for scripting. IE6 doesn't have this problem, when the link element is added the document.styleSheets.length is updated immediately. Here is a test page <html> <head> <title>style sheet addition</title> </head> <body onload="alert(event.type);"> <input type="button" value="append style sheet green" onclick="var link = document.createElement('link'); link.rel = 'stylesheet'; link.href = 'test20011121.css'; link.type = 'text/css'; document.getElementsByTagName('head')[0].appendChild(link); document.body.appendChild(document.createTextNode('document.styleSheets.length: ' + document.styleSheets.length)); document.body.appendChild(document.createElement('br')); " /> <input type="button" value="append style sheet red" onclick="var link = document.createElement('link'); link.rel = 'stylesheet'; link.href = 'test20011126.css'; link.type = 'text/css'; document.getElementsByTagName('head')[0].appendChild(link); document.body.appendChild(document.createTextNode('document.styleSheets.length: ' + document.styleSheets.length)); document.body.appendChild(document.createElement('br'));" /><br /> </body> </html>
Reporter | ||
Comment 1•22 years ago
|
||
Reporter | ||
Comment 2•22 years ago
|
||
Reporter | ||
Comment 3•22 years ago
|
||
I think the difference between IE and Mozilla is that IE blocks script execution till the style sheet is loaded while Mozilla seems to load the style sheet asynchronously. For a script it seems better to load the style sheet synchronously, or we need a load event firing for the link element.
Comment 4•22 years ago
|
||
> Although it seems the document is reloaded when the link element is inserted > the body onload event doesn't fire. That's because the document isn't reloaded. We just re-resolve the style rules throughout the document. > Thus there is no way for the scripter to know when the style sheet is > accessible for scripting. Hmm, yes... that's true... I think the solution here is to propose to the DOM HTML WG a 'isLoaded' property or similar on the HTMLLinkElement interface. We do update document.styleSheets after it has finished loaded, so I don't think this is necessarily a bug.... What does MSIE do if you have something like this: var link = document.createElement('link'); link.rel = 'stylesheet'; link.href = 'someReallyLongTextFile.txt'; link.type = 'text/css'; document.getElementsByTagName('head')[0].appendChild(link); ...where 'someReallyLongTextFile.txt' contains no CSS? If it increments the length of document.styleSheets right away before finding out if the link really does contain a stylesheet, then I would consider that a bug in IE...
Comment 5•22 years ago
|
||
Why should the stylesheet array not include unrecognised or missing stylesheets?
![]() |
||
Comment 7•21 years ago
|
||
The stylesheet array now includes missing and unrecognized sheets (so this bug, as stated, no longer exists). The new sheet _will_ however throw exceptions on most attempts to script it. I'll be adding onload events to sheets in the 1.4-1.5 timeframe. See bug 185236.
Depends on: 185236
Comment 8•18 years ago
|
||
So this should be marked fixed?
![]() |
||
Comment 9•18 years ago
|
||
Yeah, probably.
Status: NEW → RESOLVED
Closed: 18 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•