Ticket #8033 (closed bug: fixed)
jQuery 1.4.4+ fails to load on pages with old Prototype (<= 1.5) or Current Prototype + Scriptaculous in IE
| Reported by: | SlexAxton | Owned by: | SlexAxton |
|---|---|---|---|
| Priority: | blocker | Milestone: | 1.5.1 |
| Component: | core | Version: | 1.4.4 |
| Keywords: | prototype, noconflict | Cc: | |
| Blocking: | Blocked by: |
Description
This seems to be because old Prototypes would override the getelementsbyclassname native function, and inside of it, they'd use the $ sign.
In old versions of jQuery (1.4.2) our sizzle came before we set our global variables, now it comes after. That seems to break.
Examples
http://jsfiddle.net/Bd7HU/7/ - jquery 1.4.4 and prototyp 1.5 fails http://jsfiddle.net/wMx9E/1/ - jquery 1.4.2 and prototype 1.5 ok http://jsfiddle.net/2zEj5/1/ - jquery 1.4.4 and prototype 1.6 ok
I'd say not to worry about this, but it's a really easy fix. Just move
window.jQuery = window.$ = jQuery;
to the end of the file... I'll submit a patch.
Change History
comment:1 Changed 2 years ago by SlexAxton
- Status changed from new to assigned
- Component changed from unfiled to core
- Priority changed from undecided to low
- Owner set to SlexAxton
- Milestone changed from 1.next to 1.5
- Keywords prototype, noconflict added
comment:2 Changed 2 years ago by SlexAxton
Hmmm, looks like the issue _does_ happen in recent versions of Prototype as well (in IEs only) if Scriptaclous is also on the page. (pretty common) (when prototype and scriptaculous come first).
The same fix of moving the jQuery window leak to the bottom works. The build process is the only thing that makes this nontrivial.
We created $.noConflict to allow people to work with these other libraries, and since the fix here is just switching where code is executed, it seems like a good faith effort to make things easy for everyone.
Please follow the bug reporting guidlines and use jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.
