Closed
Bug 91450
Opened 23 years ago
Closed 23 years ago
complete loss of style when executing a certain javascript
Categories
(Core :: DOM: CSS Object Model, defect, P2)
Tracking
()
RESOLVED
FIXED
mozilla0.9.4
People
(Reporter: wo, Assigned: peterv)
References
()
Details
(Keywords: regression, Whiteboard: [Hixie-P3])
Attachments
(1 file)
(deleted),
patch
|
Details | Diff | Splinter Review |
On http://www.umsu.de/tests/zdvlopmozbug.html, if you click the link "Element
Labels", all style rules for the entire document will be lost. This is what that
link does:
<a class="b" href="javascript:
function z7T0(par){
for(var i=0; i<par.childNodes.length; i++){
var z=par.childNodes[i];
if(z.nodeType!=1)continue;
z.title='tagName: '+z.tagName+'\nid: '+(z.id || '[none]')
+'\nparentNode: '+(z.parentNode.tagName || '[none]')
+'\nchildren: '+z.childNodes.length;
z7T0(z);
}
};
z7T0(document.documentElement);
">
If I find some time I'll try to isolate that problem further.
Tested with NB 2001-07-18-03 and M0.91 on win98.
Comment 1•23 years ago
|
||
OK. Here is the problem. document.documentElement is <html>, not <body>.
So you end up resetting the "title" attribute of the <style> element.
Looks like we're deapplying the stylesheet when that happens, because which
stylesheet is applied depends on the title, of course. Thing is, title seems to
be only magical for <link> styles, not <style> styles.
setting status to NEW and over to style system to decide whether this is
actually a bug.
Wolfgang, if you getElementById to get the <style> element and change its title
in IE, does the style get lost? Does document.documentElement return <html> or
<body> in IE?
Assignee: jst → pierre
Status: UNCONFIRMED → NEW
Component: DOM Style → Style System
Ever confirmed: true
Reporter | ||
Comment 2•23 years ago
|
||
document.documentElement is <html> in IE as well, but changing the <style>'s
title does never affect the layout, no matter how I access it (tested with
getElementById, getElementsByTagName and document...childNodes[...]).
Comment 3•23 years ago
|
||
This is a regression added by peterv on May 18 2001 while working on bug 7515.
When the <style>'s title is changed we call nsHTMLStyleElement::SetAttribute()
and then nsStyleLinkElement::UpdateStyleSheet() which has for function to remove
a stylesheet and load it all over again. Problem: to reload the stylesheet,
UpdateStyleSheet() needs an URL, which it doesn't have in this particular case
because the styles comes from a <style> element, not from a linked stylesheet. It
means that the <style> element's stylesheet is removed and nothing is re-
inserted: all the style disappears.
1) What kind of attributes can change on the <style> element? Is there any that
require an update of the stylesheet? If so, nsHTMLStyleElement may need to
implement its own version of UpdateStyleSheet() instead of reusing the one from
nsStyleLinkElement.
2) In the case of a linked stylesheet, should all the attributes cause an update
of the stylesheet? Can't we do an update for just a small list of attributes?
Reassigned to DOM Style.
Comment 4•23 years ago
|
||
> 1) What kind of attributes can change on the <style> element?
type, media, title
When the type is changed, we probably want to reload the stylesheet (in case it
is no longer CSS), right? When media is changed do we need to reload the
stylesheet? And for title changing we don't need to.
2) In the case of a linked stylesheet, should all the attributes cause an update
of the stylesheet?
Well.. we need to update for title, href, type, and rel. The other attributes
of a <LINK> element should not cause updates, being inapplicable to stylesheets.
Comment 7•23 years ago
|
||
Mozilla should consider the title attribute of <style> elements to be equivalent
to the title attribute of <link> elements. (IE doesn't support this.)
Keywords: qawanted
Whiteboard: [Hixie-P3]
Assignee | ||
Comment 8•23 years ago
|
||
Attaching a patch. Internally, inline stylesheets have the document URL as their
URL, so we need to compare with that if the href is empty. I think the updating
of the stylesheets when any of the other attributes change should be filed as a
separate RFE.
Status: NEW → ASSIGNED
Assignee | ||
Comment 9•23 years ago
|
||
Comment 10•23 years ago
|
||
r=pierre
Assignee | ||
Updated•23 years ago
|
Priority: -- → P2
Target Milestone: --- → mozilla0.9.4
Comment 11•23 years ago
|
||
Documents don't always have base url's, you should check for a null base url and
ask for the document url if there's no base url. With that, sr=jst
Assignee | ||
Comment 12•23 years ago
|
||
Jst, but then the loader would use a null url, no? See
http://lxr.mozilla.org/seamonkey/source/content/html/style/src/nsCSSLoader.cpp#1288.
I don't see how I could handle that at all.
Comment 13•23 years ago
|
||
Ignore my comments about documents not always having a base URI.
Assignee | ||
Comment 14•23 years ago
|
||
Checked in.
Status: ASSIGNED → RESOLVED
Closed: 23 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•