Bug Tracker

Ticket #8033 (closed bug: fixed)

Opened 4 years ago

Last modified 4 years ago

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 4 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 4 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).

 http://jsfiddle.net/dU7FB/3/

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.

Last edited 4 years ago by SlexAxton (previous) (diff)

comment:3 Changed 4 years ago by SlexAxton

I submitted a patch that passes all tests for this here:

 https://github.com/jquery/jquery/pull/204

comment:4 Changed 4 years ago by SlexAxton

  • Summary changed from jQuery 1.4.4+ fails to load on pages with old Prototype (<= 1.5) to jQuery 1.4.4+ fails to load on pages with old Prototype (<= 1.5) or Current Prototype + Scriptaculous in IE

comment:5 Changed 4 years ago by jitter

  • Milestone set to 1.5.1

comment:6 Changed 4 years ago by john

  • Priority changed from low to blocker

comment:7 Changed 4 years ago by john

  • Status changed from assigned to closed
  • Resolution set to fixed

Landed.

Note: See TracTickets for help on using tickets.