Sto usando questo plugin popup jquery from this link sul mio sito WordPress. Funziona bene su tutti i browser, ma dà il seguente errore su IE11.Errore: l'oggetto non supporta la proprietà o il metodo 'assign'
Qualsiasi aiuto è molto apprezzato.
Sto usando questo plugin popup jquery from this link sul mio sito WordPress. Funziona bene su tutti i browser, ma dà il seguente errore su IE11.Errore: l'oggetto non supporta la proprietà o il metodo 'assign'
Qualsiasi aiuto è molto apprezzato.
Questi errori si verificano in genere quando un ID elemento html ha lo stesso ID di alcune variabili nella funzione JavaScript. Dopo aver cambiato il nome di uno di essi il codice ha funzionato.
Fonte: SCRIPT438: Object doesn't support property or method IE
Altri link: jquery validation IE Object doesn't support property
Come per la documentazione, Object.assign() è una nuova tecnologia, che fa parte del ECMAScript 2015 (ES6) di serie
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/assign
E, non è supportato da IE.
Come si implementa un polyfill come https://www.npmjs.com/package/event-source-polyfill? In un nodo/stack di reazione? –
Come altri hanno detto, il metodo Object.assign() non è supportato in IE, ma c'è un polyfill a disposizione, basta includerlo "prima" la vostra dichiarazione plugin:
if (typeof Object.assign != 'function') {
Object.assign = function(target) {
'use strict';
if (target == null) {
throw new TypeError('Cannot convert undefined or null to object');
}
target = Object(target);
for (var index = 1; index < arguments.length; index++) {
var source = arguments[index];
if (source != null) {
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
}
return target;
};
}
Da https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
pagina di prova : http://jsbin.com/pimixel/edit?html,js,output (basta rimuovere il polyfill per ottenere lo stesso errore che si ottiene sulla pagina).
Perché usa il singolo '! =' Invece di più sicuro '! =='? –
Una possibile soluzione a questo problema:
Add the script legacy.min.js before the custombox.min.js
fonte: custombox github project
@ Andres-Ilich ha la risposta giusta alla tua domanda, ma che stai chiedendo la domanda sbagliata:
Perché non solo usare un plugin jQuery che supporti IE come l'eccellente Reveal di Zurb: https://github.com/zurb/reveal
Farà ogni cosa vuoi e non lanciare questo errore
@ John Doe
ho capito dal tuo commento che si desidera implementare questo nodo/reagire stack. Questo è molto diverso da domanda originale e si dovrebbe avere chiesto il proprio;)
In ogni modo, Heres che cosa dovete fare ...
È possibile utilizzare [ES6-oggetto-assegnazione] [1]. È un ES6 Object.assign() "polyfill".
In primo luogo, in package.json
nella cartella principale, aggiungi es6-object-assign
come dipendenza:
"dependencies": {
"es6-object-assign": "^1.0.2",
"react": "^0.12.0",
...
},
Poi, se si desidera utilizzarlo in nodo uso ambiente:
require('es6-object-assign').polyfill();
Se si stanno avendo la problema sul fronte (browser) fine ...
Aggiungilo nel tuo file index.html ...
<script src="location_of_node_modules/es6-object-assign/dist/object-assign.min.js"></script>
<script>
window.ObjectAssign.polyfill();
</script>
location_of_node_modules
dipende boilerplate si utilizza, per lo più solo node_modules
, ma a volte quando index.html è in una sottodirectory è necessario utilizzare, ../node_modules
attualmente lavorando su un jQuery popup me stesso: https://github.com/seahorsepip/jPopup
ha tutto ti aspetteresti da un popup e altro: D
Comunque, tornando all'argomento, sto attualmente scrivendo la versione 2 che è una grande riscrittura e aggiunge il supporto per IE6 (versione 1 era IE7 +) e ha avuto un errore simile. ..
Codice originale che ha dato l'errore in IE6:
//Insane code for an insane browser
this._vars.fakeScrollbar = $("<div style=\"position:absolute;top:expression(document.documentElement.scrollTop);right:0;bottom:0;margin-left:-200px;width:0;overflow-y:scroll;height:expression(document.documentElement.clientHeight);z-index:9999999;\"></div>");
L'hack ho dovuto venire con:
//Insane code for an insane browser
this._vars.fakeScrollbar = $("<div>");
this._vars.fakeScrollbar.html("<div style=\"position:absolute;top:expression(document.documentElement.scrollTop);right:0;bottom:0;margin-left:-200px;width:0;overflow-y:scroll;height:expression(document.documentElement.clientHeight);z-index:9999999;\"></div>");
this._vars.fakeScrollbar = this._vars.fakeScrollbar.children();
In sostanza, Object.assign
non è supportato da tutti i browser, tuttavia, è possibile per riassegnarlo al Object
caso non è supportato dal browser corrente.
È pratica per eseguire una funzione di riempimento di poligoni, che si comporta allo stesso modo di Object.assign(target, ...)
di ES6.
ritengo la soluzione migliore è quella di iterare ogni argomento dopo target
, assegnare a ciascuna proprietà di arguments
oggetti target
, considerando un'iterazione tra oggetti e array, per evitare di creare riferimenti. Facoltativamente, per non perdere le istanze, è possibile rilevare se l'ultima istanza della proprietà è uguale a "Array"
o "Object"
, e così facendo non si perderà un'interfaccia Image
(ad esempio) se si intende creare nuovi riferimenti, ma oggetti con queste istanze saranno comunque riferimento.
Modifica: l'originale Object.assign
non funziona in questo modo.
Secondo questa soluzione, ho il mio polyfill che può essere trovato here.
Poiché la domanda è stata contrassegnata con jQuery, è possibile utilizzare la funzione jQuery extend. Non c'è bisogno di un polyfill e si fonde in profondità.
Per esempio:
var object1 = {
apple: 0,
banana: { weight: 52, price: 100 },
cherry: 97
};
var object2 = {
banana: { price: 200 },
durian: 100
};
// Merge object2 into object1
$.extend(object1, object2);
Risultato:
{"apple":0,"banana":{"price":200},"cherry":97,"durian":100}
@JohnDoe, si può fornire un esempio di lavoro? – Dekel
@pragya, per favore metti un po 'di codice in modo che possiamo giudicare quale sia il problema ... il mio sia è un problema con l'elemento dom non trovato o lo stesso id più tempo sulla pagina. –