Side navigation
#2612 closed bug (invalid)
Opened March 28, 2008 10:46PM UTC
Closed December 02, 2010 08:07AM UTC
Last modified January 31, 2011 05:54PM UTC
domManip is not always respecting script execution order on IE7
Reported by: | jwagner | Owned by: | jwagner |
---|---|---|---|
Priority: | low | Milestone: | 1.5 |
Component: | ajax | Version: | 1.5 |
Keywords: | script ajax getScript domManip | Cc: | |
Blocked by: | Blocking: |
Description
Hello,
I have an application where I have several script nodes that I append on a node.
When those script elements have a relative src, jquery-1.2.4 manages to execute them synchronously and in the correct order. From what I understand, this is the expected behavior.
But when the script elements have an absolute src, IE7 does not wait for the synchronous execution of the nodes. This leads to random problems in IE7 when a function that is defined in a remote script is called in another inline script element.
Attached is a proposed patch to execute the scripts on a callback chain, using jQuery.getScript when necessary.
I hope this patch suits your coding standards and that you will also consider that the jquery-1.2.3 behavior on this point is a bug.
I can adapt it if you give me some advice because I would really like to have it incorporated in the next jquery release as it fixes a bug on my application.
Jerome
Attachments (1)
Change History (7)
Changed March 18, 2009 03:39AM UTC by comment:1
component: | ajax → core |
---|
Changed May 15, 2009 11:56PM UTC by comment:2
This bug is related to using the XMLHttpRequest object to load scripts when the script src is of the same domain as the page. I came across the same problem in jQuery 1.2.6 when trying to make an AJAX widget which loads in pages of different and same domains. When loading on a location that has a different host it worked fine because synchronous loading was honored, but when loading from a location that had the same host it broke due to jQuery thinking all dynamically inserted scripts were loaded before they actually were. I traced the problem to be in the ajax function where the code checks if the script src is for the same domain and if not it loads via inserted script elements, which works while also adhering to the synchronous flag. I'm not sure why it was decided to load scripts differently when on a different domain? Note that I got around the problem by using the following hack:
eval("var location={host: \\"lame_hack\\",protocol:window.location.protocol};now=jQuery.now;jsc=jQuery.now();jQuery.ajax=" + jQuery.ajax.toString());
What I am doing is reevaluating the ajax function and placing a location variable in scope which contains a host field that will never match the current host. This causes all scripts to take the code route where they get loaded via script element insertion and thus synchronous loading is honored.
Changed November 15, 2010 12:46AM UTC by comment:4
component: | core → ajax |
---|---|
milestone: | 1.2.4 → 1.4.5 |
owner: | → jwagner |
priority: | major → low |
status: | new → pending |
Can someone verify that this is still an issue?
Changed December 02, 2010 08:07AM UTC by comment:5
resolution: | → invalid |
---|---|
status: | pending → closed |
Automatically closed due to 14 days of inactivity.
Changed January 31, 2011 05:53PM UTC by comment:6
version: | 1.2.3 → 1.5 |
---|
There wasn't a 1.4.5 release, was actually 1.5.
Changed January 31, 2011 05:54PM UTC by comment:7
milestone: | 1.4.5 → 1.5 |
---|
There was no 1.4.5 release, was actually 1.5.