CodeByZach / pace

Automatically add a progress bar to your site.
https://codebyzach.github.io/pace/
MIT License
15.68k stars 1.9k forks source link

Breaks class properties of XmlHTTPRequest #261

Open ef4 opened 9 years ago

ef4 commented 9 years ago

When this library extends XMLHttpRequest here:

https://github.com/HubSpot/pace/blob/b202561ac0d5721a5df8d48dbf94f237c3d44405/pace.coffee#L343-L348

It doesn't bring along the properties of the XMLHttpRequest object itself. For example, XMLHttpRequest.DONE is supposed to be a constant, but after extension it's not.

jesjobom commented 8 years ago

Would that be the cause of new XMLHttpRequest() instanceof XMLHttpRequest; //false ?

I had some problems with it...

ef4 commented 8 years ago

Yes, the extension strategy breaks that too.

ghost commented 8 years ago

I'm not sure this is the same issue, but I was working on a XMLHttpRequest methods reload and found that prototype is broken console.log(XMLHttpRequest.prototype.send); // undefined

This may lead to incompatibility with custom code or other plugins, which rewrites the XMLHttpRequest prototype. This can be fixed by adding: XMLHttpRequest.prototype = Object.getPrototypeOf(new XMLHttpRequest); after pace.js was initialized: console.log(XMLHttpRequest.prototype.send); // function send() { [native code] }

On the OpenToke custom service mentioned that this issue can be fixed by adding to.prototype = Object.getPrototypeOf(new from); before 375 line in the pace.js file. See more: https://forums.tokbox.com/bugs/opentok-conflicts-with-pace-js-t46935

nitinsurana commented 8 years ago

Is this fixed yet ? Same as @jesjobom new instances returns false.

khoan commented 8 years ago

bump

ValentinFunk commented 7 years ago

Really bad issue, this breaks all sorts of scripts in subtle and frustrating ways.

andreabisello commented 7 years ago

The use of this library hangs implementation based on XMLHttpRequests . My customer use this library in their website and this will broke my project. When it will be fixed? thanks.

Tomm96 commented 7 years ago

Bump. It really conflicts with Symfony toolbar. No AJAX calls in the web profiler.

1antares1 commented 7 years ago

Thanks @ecolotko Effectively! That instruction before line 375, has worked for me. appInsight from Azure doesn't track why .send function() is replaced.

In case of using the version: pace.min.js, you only have to search for the statement:

:a[d]=b.prototype[d]:void 0)}catch(f){c=f}

Replace by:

:a[d]=b.prototype[d]:void 0)}catch(f){c=f}a.prototype = Object.getPrototypeOf(new b);

For those still working with bower, I suggest copying: pace.min.js (modified) and copying to an external route, and use: override.

Example:

     Pace
       "Main": [
         "../../content/scripts/custom/pace.min.js",
       ]
     }

Best regards.

pjehan commented 7 years ago

Thanks @1antares1

Update for version 1.0.2, search for: a[d]=b.prototype[d]):e.push(void 0)}catch(f){c=f}

Fixed the conflict with Symfony Profiler.

lastzero commented 6 years ago

Any reason why this wasn't fixed so far? Do you need a pull request?

a2intl commented 4 years ago

I think I tracked this down to the key not being loop-localized in extendNative here: https://github.com/HubSpot/pace/blob/master/pace.coffee#L296 , so all the XMLHttpRequests property values end up as the value of the last-property-enumerated. I'll submit a PR, but it doesn't seem like there's anyone merging them for the last couple years.

dragonbane0 commented 3 years ago

CookiePro was also affected by this, which https://github.com/CodeByZach/pace/pull/504 successfully fixed. Good job! Maybe a new publish to NPM could be considered, since many use it from there to this day and the versions up there are very outdated.