pace icon indicating copy to clipboard operation
pace copied to clipboard

Breaks class properties of XmlHTTPRequest

Open ef4 opened this issue 10 years ago • 13 comments

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.

ef4 avatar Oct 13 '15 18:10 ef4

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

I had some problems with it...

jesjobom avatar Jan 03 '16 22:01 jesjobom

Yes, the extension strategy breaks that too.

ef4 avatar Jan 04 '16 23:01 ef4

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

ghost avatar Jan 14 '16 17:01 ghost

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

nitinsurana avatar Apr 14 '16 13:04 nitinsurana

bump

khoan avatar Nov 23 '16 06:11 khoan

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

ValentinFunk avatar Jan 30 '17 13:01 ValentinFunk

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.

andreabisello avatar Mar 22 '17 09:03 andreabisello

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

Tomm96 avatar Jul 07 '17 17:07 Tomm96

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.

1antares1 avatar Jul 13 '17 20:07 1antares1

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.

pjehan avatar Sep 16 '17 15:09 pjehan

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

lastzero avatar Apr 10 '18 07:04 lastzero

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.

a2intl avatar Nov 04 '20 21:11 a2intl

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.

dragonbane0 avatar Dec 01 '20 15:12 dragonbane0