choirulz / base2

Automatically exported from code.google.com/p/base2
0 stars 0 forks source link

base2 breaks Safari 2.x getComputedStyle #25

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
On Safari 2.x run followng js

base2.DOM.bind(document);
base2.DOM.bind(window);

alert(document.defaultView);

it will return "undefined" if those two base2 binds would be omitted it
will return expected object.

Working example at following link:
http://mariuszn3.com/base2/csTest.html 
(click get style link)

and exactly same page but without base2:
http://www.snook.ca/technical/safaridisplaystyle/

Latest version of Base2: Fri, 13 Jul 2007 13:13:32

Original issue reported on code.google.com by marius...@gmail.com on 17 Jul 2007 at 11:43

GoogleCodeExporter commented 9 years ago
For starters: you don't need to call "base2.DOM.bind(window)". In fact, window 
is not a DOM object, and I 
don't know what happens.

Dean: should we introduce a test in Binding.bind? 
Something like if(!object.nodeType) throw Error("DOM Node expected")

Bug is confirmed for Safari 2, but is doesn't appear in WebKit. 
The difference in execution happens in BOM.detect. The statement (the try/catch 
part):
    eval("r=!!(getComputedStyle)")

throws the error "ReferenceError - Can't find variable: getComputedStyle" in 
Safari 2, but not in WebKit. 

Safari 2 *does* support getComputedStyle though.  

Code path:
-Document.bind
-AbstractView+ViewCSS.bind(document.defaultView)
-ViewCSS[@!(getComputedStyle)]

Original comment by doek...@gmail.com on 17 Jul 2007 at 8:16

GoogleCodeExporter commented 9 years ago
As it appears, Safari2 is defining document.defaultView.getComputedStyle, but 
not window.getComputedStyle. 
That explains why the test fails.

Firefox2, Opera9 and IE6 all do define document.defaultView.getComputedStyle, 
so change the test in ViewCSS 
to that.

Solved in /trunk/src, not yet in /trunk/lib.

Original comment by doek...@gmail.com on 17 Jul 2007 at 8:47

GoogleCodeExporter commented 9 years ago
> Dean: should we introduce a test in Binding.bind? 
Something like if(!object.nodeType) throw Error("DOM Node expected")

Later. ;-) At the moment, binding is encouraged through the DOM.bind() method 
not
through the Binding's individual bind() methods. But we can put some captures 
there
for when we are in strict mode.

Incidentally, there is a feature of packer that treats lines that start with 
";;;" as
single line comments:

e.g.
;;; console.log("this will show up in the source code but not in packed code");

I'm re-opening this bug because I quite like a global getComputedStyle() 
function. It
won't do any harm to add it to the window object.

Original comment by dean.edw...@gmail.com on 17 Jul 2007 at 9:30

GoogleCodeExporter commented 9 years ago

Original comment by dean.edw...@gmail.com on 17 Jul 2007 at 9:31

GoogleCodeExporter commented 9 years ago
Sorry, I didn't check in until just now. trunk/lib still has to be generated 
(I'm working on that).

DOM.bind(window) actually doesn't to anything. There's already a switch for 
that in DOM.bind (I missed that 
one).

window.getComputedStyle sounds good. Your call?

Original comment by doek...@gmail.com on 17 Jul 2007 at 10:07

GoogleCodeExporter commented 9 years ago
This bug is fixed with the change you made. As to the window.getComputedStyle()
issue, that is covered in another bug.

Original comment by dean.edw...@gmail.com on 23 Jul 2007 at 9:06