J'utilise THREE dans un projet Aurelia-CLI. Cela signifie qu'il est chargé à l'aide de modules et de RequireJS. Cela fonctionne très bien sauf dans Internet Explorer (testé dans IE 11).
Le code qui casse est le suivant (dans la section polyfill en haut, lignes 42-57) dans le fichier /build/three.js
if ( Function.prototype.name === undefined ) {
// Missing in IE
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name
Object.defineProperty( Function.prototype, 'name', {
get: function () {
return this.toString().match( /^\s*function\s*([^\(\s]*)/ )[ 1 ];
}
} );
}
Il renvoie l'erreur can't redefine non-configurable property "name"
.
Suite à ce post, j'ai essayé de remplacer le code ci-dessus par:
if (!(function f() {}).name) {
Object.defineProperty(Function.prototype, 'name', {
get: function() {
var name = (this.toString().match(/^function\s*([^\s(]+)/) || [])[1];
// For better performance only parse once, and then cache the
// result through a new accessor for repeated access.
Object.defineProperty(this, 'name', { value: name });
return name;
}
});
}
Et ça résout le problème !
=> Il semble que le code polyfill actuellement utilisé dans /build/three.js ne fonctionne pas bien. Est-il possible de remplacer ce code pour les futures versions ?
Changer le chèque en cela ferait-il une différence?
if ( 'name' in Function.prototype === false ) {
Ou alors
if ( Function.prototype.hasOwnProperty( 'name' ) === false ) {
Je confirme qu'il suffit de changer le if
.
if ( 'name' in Function.prototype === false ) {
c'est la voie à suivre !
Fixé. Merci!
Commentaire le plus utile
Je confirme qu'il suffit de changer le
if
.c'est la voie à suivre !