From: Michael A. P. I. <sha...@gm...> - 2007-08-12 07:02:18
|
I was doing some research on the usage of window.opera for detecting Opera (to see how many rely on it) and google code search lead me to SquirrelMail's templates sources. For example, < http://squirrelmail.svn.sourceforge.net/viewvc/squirrelmail/trunk/squirrelmail/templates/default/js/default.js?view=markup > Anyway, I noticed the comment "3.1 ... with DOM compatible browsers except Opera that does not return valid values with getAttribute". What is meant by that, exactly? I know that in older versions of Opera, getAttribute used to return "" instead of null if the attribute wasn't found. Is that what the workaround is for or is it something totally different? If it's something that isn't fixed yet in Opera and no one has filed on it, I'll do it. Thanks. -- Michael |
From: Paul L. <pa...@sq...> - 2007-08-12 22:36:26
|
On 8/12/07, Michael A. Puls II <sha...@gm...> wrote: > I was doing some research on the usage of window.opera for detecting > Opera (to see how many rely on it) and google code search lead me to > SquirrelMail's templates sources. > > For example, < http://squirrelmail.svn.sourceforge.net/viewvc/squirrelmail/trunk/squirrelmail/templates/default/js/default.js?view=markup > > > > Anyway, I noticed the comment "3.1 ... with DOM compatible browsers > except Opera that does not return valid values with getAttribute". > > What is meant by that, exactly? I know that in older versions of > Opera, getAttribute used to return "" instead of null if the attribute > wasn't found. > > Is that what the workaround is for or is it something totally different? > > If it's something that isn't fixed yet in Opera and no one has filed > on it, I'll do it. IIRC this chunk of code comes from PHPMyAdmin. You might want to ask there. Is SM broken because of this in Opera? |
From: Michael A. P. I. <sha...@gm...> - 2007-08-13 05:00:18
|
On 8/12/07, Paul Lesniewski <pa...@sq...> wrote: > On 8/12/07, Michael A. Puls II <sha...@gm...> wrote: > > I was doing some research on the usage of window.opera for detecting > > Opera (to see how many rely on it) and google code search lead me to > > SquirrelMail's templates sources. > > > > For example, < > http://squirrelmail.svn.sourceforge.net/viewvc/squirrelmail/trunk/squirrelmail/templates/default/js/default.js?view=markup > > > > > > > Anyway, I noticed the comment "3.1 ... with DOM compatible browsers > > except Opera that does not return valid values with getAttribute". > > > > What is meant by that, exactly? I know that in older versions of > > Opera, getAttribute used to return "" instead of null if the attribute > > wasn't found. > > > > Is that what the workaround is for or is it something totally different? > > > > If it's something that isn't fixed yet in Opera and no one has filed > > on it, I'll do it. > > IIRC this chunk of code comes from PHPMyAdmin. You might want to ask > there. O.K. Thanks. Is SM broken because of this in Opera? No. I was just looking for valid uses of window.opera and I'll ask over there, but to explain more: It's just that with the following from default.js: function setCSSClass (obj, newClass) { if (typeof(window.opera) == 'undefined' && typeof(obj.getAttribute) != 'undefined' && obj.getAttribute('className') ) { obj.setAttribute('className', newClass, 0); } else { obj.className = newClass; } } (and getCSSClass) Safari, Opera (even 8.x) and Firefox get the else condition. The if condition is just for IE because in IE, getAttribute("className") is how you do getAttribute("class"). The check for window.opera being undefined doesn't appear to be needed at all because getAttribute("className') will be "" or null in Opera which would cause the condition not to be met. So, even without the check for Opera, Opera will still get the else condition like Firefox and Safari. Now, the only thing the check for window.opera being undefined does is prevent Opera from getting IE's code if an actual className="foo" attribute is present on the element. I guess that's good, but Safari and Firefox would still get IE's code in that situation, so that leads me to believe that's not why they're detecting opera. The reason given for detecting window.opera is because it doesn't return valid values for getAttribute, but I'm not sure why they say that. (I'm not saying they're wrong, just trying to find out specifically.) The problem with window.opera detection is that it assumes that all future versions of Opera have the same bug (if there's really even a bug) and newer versions of Opera that don't have the bug still get the old workaround code instead of what other browsers get. If the workaround is bad, it can cause problems in all future versions of Opera while things work fine in other browsers. This is not a concern in this case with default.js, but just saying that it appears that they don't even need to detect Opera specifically. If there really is a bug with Opera's getAttribute, a test for the bug should be made instead of just assuming every opera version with window.opera has the bug. But, again, wtih default.js, I don't even see the bug, which is what I was trying to find. In opera, you sometimes have to use userJS to hide window.opera from sites that misuse it so that the site works like it does in other browsers. Thanks Paul. -- Michael |
From: Paul L. <pa...@sq...> - 2007-08-13 22:50:08
|
On 8/12/07, Michael A. Puls II <sha...@gm...> wrote: > On 8/12/07, Paul Lesniewski <pa...@sq...> wrote: > > On 8/12/07, Michael A. Puls II <sha...@gm...> wrote: > > > I was doing some research on the usage of window.opera for detecting > > > Opera (to see how many rely on it) and google code search lead me to > > > SquirrelMail's templates sources. > > > > > > For example, < > > http://squirrelmail.svn.sourceforge.net/viewvc/squirrelmail/trunk/squirrelmail/templates/default/js/default.js?view=markup > > > > > > > > > > Anyway, I noticed the comment "3.1 ... with DOM compatible browsers > > > except Opera that does not return valid values with getAttribute". > > > > > > What is meant by that, exactly? I know that in older versions of > > > Opera, getAttribute used to return "" instead of null if the attribute > > > wasn't found. > > > > > > Is that what the workaround is for or is it something totally different? > > > > > > If it's something that isn't fixed yet in Opera and no one has filed > > > on it, I'll do it. > > > > IIRC this chunk of code comes from PHPMyAdmin. You might want to ask > > there. > > O.K. Thanks. > > Is SM broken because of this in Opera? > > No. > > I was just looking for valid uses of window.opera and I'll ask over > there, but to explain more: > > It's just that with the following from default.js: > > function setCSSClass (obj, newClass) { > if (typeof(window.opera) == 'undefined' && > typeof(obj.getAttribute) != 'undefined' && > obj.getAttribute('className') ) { > obj.setAttribute('className', newClass, 0); > } else { > obj.className = newClass; > } > } > > (and getCSSClass) > > Safari, Opera (even 8.x) and Firefox get the else condition. The if > condition is just for IE because in IE, getAttribute("className") is > how you do getAttribute("class"). > > The check for window.opera being undefined doesn't appear to be needed > at all because getAttribute("className') will be "" or null in Opera > which would cause the condition not to be met. So, even without the > check for Opera, Opera will still get the else condition like Firefox > and Safari. > > Now, the only thing the check for window.opera being undefined does is > prevent Opera from getting IE's code if an actual className="foo" > attribute is present on the element. I guess that's good, but Safari > and Firefox would still get IE's code in that situation, so that leads > me to believe that's not why they're detecting opera. > > The reason given for detecting window.opera is because it doesn't > return valid values for getAttribute, but I'm not sure why they say > that. (I'm not saying they're wrong, just trying to find out > specifically.) > > The problem with window.opera detection is that it assumes that all > future versions of Opera have the same bug (if there's really even a > bug) and newer versions of Opera that don't have the bug still get the > old workaround code instead of what other browsers get. If the > workaround is bad, it can cause problems in all future versions of > Opera while things work fine in other browsers. > > This is not a concern in this case with default.js, but just saying > that it appears that they don't even need to detect Opera > specifically. > > If there really is a bug with Opera's getAttribute, a test for the bug > should be made instead of just assuming every opera version with > window.opera has the bug Yes, this is the correct approach. You give them a lot of credit, but I'm guessing that they are mistaken in how they "solved" whatever bug they were working around. >. But, again, wtih default.js, I don't even > see the bug, which is what I was trying to find. > > In opera, you sometimes have to use userJS to hide window.opera from > sites that misuse it so that the site works like it does in other > browsers. If you find something out from them, can you let us know? Maybe they've already changed that code themselves... - Paul |
From: Michael A. P. I. <sha...@gm...> - 2007-08-15 06:50:33
|
On 8/13/07, Paul Lesniewski <pa...@sq...> wrote: > If you find something out from them, can you let us know? Maybe > they've already changed that code themselves... Will do. -- Michael |