2016-02-05 89 views
31

Bu jquery popup eklentisini WordPress sitemde from this link kullanıyorum. Tüm tarayıcılarda iyi çalışıyor, ancak IE11'de aşağıdaki hatayı veriyor. Hata Alma: Nesne özelliği veya yöntemi desteklemiyor 'atama'

enter image description here

Herhangi bir yardım

çok takdir edilmektedir.

+2

@JohnDoe, çalışan bir örnek sağlayabilir? – Dekel

+2

@ pragya, lütfen sorununuzu yargılayabilmemiz için bazı kodlarınızı yazınız ... benim olsam dom öğesi bulunamamış veya sayfada birden fazla defa aynı kimliğe sahip. –

cevap

6

belgelerine göre, Object.assign() standart yeni bir teknoloji, ECMAScript 2015 (ES6) bir parçasıdır

https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/assign

Ve IE tarafından desteklenmiyor.

Diğerleri de söylediğim gibi, Object.assign() yöntem IE desteklenen, ancak bir polyfill mevcutsa değildir
+0

https://www.npmjs.com/package/event-source-polyfill gibi bir polfill nasıl uygulanır? Bir düğüm/tepki yığında mı? –

60

, sadece şunlardır sizin eklenti bildiriminde "önce":

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; 
    }; 
} 

Test sayfası

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign itibaren : http://jsbin.com/pimixel/edit?html,js,output (sayfanıza girdiğinizde aynı hatayı almak için çoklu dolguyu kaldırın).

+2

Neden tek '' = 'yerine daha güvenli'! == 'kullanıyor? –

6

Bu sorunun olası bir çözüm:

Add the script legacy.min.js before the custombox.min.js

kaynağı: custombox github project Andres-İlyiç sorunuzun doğru cevabı vardır ama yanlış soruyu soruyorsun @

5

@John Doe

Sana düğümünde bu/yığını tepki uygulamak istediğiniz yorumun anladım. Bu, orijinal sorudan çok farklıdır ve kendi isteğinizi sormalısınız;)
Neyse, Heres ne yapmanız gerekiyor ...

[es6-object-assign] [1] tuşlarını kullanabilirsiniz. Bu bir ES6 Object.assign() "polyfill" dir.

Öncelikle, kök klasöründe package.json yılında, bir bağımlılık olarak es6-object-assign ekleyin: Sonra

"dependencies": { 
    "es6-object-assign": "^1.0.2", 
    "react": "^0.12.0", 
    ... 
    }, 

Düğüm ortamı kullanımında kullanmak istiyorsanız:

require('es6-object-assign').polyfill(); 

Eğer yaşıyorsanız ön (tarayıcı) ucunda sorunu ...
... index.html dosyasında ekle

<script src="location_of_node_modules/es6-object-assign/dist/object-assign.min.js"></script> 
<script> 
    window.ObjectAssign.polyfill(); 
</script> 

kullandığınız boilerplate, çoğunlukla sadece node_modules bağlıdır, ama index.html

3

../node_modules Şu anda jQuery üzerinde çalışan kullanmak gerekir bir alt dizin, olduğunda bazen kendime pop-up: https://github.com/seahorsepip/jPopup

herşeyi Has Bir açılır pencere ve daha fazlasını beklersiniz: D

Her halükarda, büyük bir yeniden yazım olan ve IE6 (sürüm 1 IE7 +) için destek ekleyen ve benzer bir hatayla karşılaşan 2. sürümü yazıyorum. ..

IE6 hata verdi

Orjinal kodu:

//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>"); 

vardı kesmek ile gelip: Temelde

//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(); 
1

, Object.assign tüm tarayıcılar tarafından desteklenmez, ancak, bu mümkün Object numaralı duruma yeniden atamak için geçerli tarayıcı tarafından desteklenmez.

ES6'nın Object.assign(target, ...) ile aynı şekilde davranan bir çoklu doldurma işlevi yapmak için pratiktir.

Bence en iyi çözüm başvuruları yaratmaktan kaçınmak için, nesneler ve diziler arasında bir yineleme dikkate, target sonra her argüman yineleme target için arguments nesnelerin her biri özelliğini atamak olduğunu düşünüyorum. İsteğe bağlı olarak, örneklerin kaybolmaması için, özelliğin son örneğinin yalnızca "Array" veya "Object"'a eşit olup olmadığını algılayabilir ve bu sayede Image arabirimini (örneğin) yeni referanslar oluşturmayı planlıyorsanız, ancak nesneler bu örnekler hala referans olacaktır.

Düzenle: Orijinal Object.assign bu şekilde çalışmıyor.

Bu çözüme göre, here bulunabilir kendi kendi polifillik var.

2

Soruyu jQuery ile etiketlediğinizden, jQuery extend işlevini kullanabilirsiniz. Polifiliğe gerek yok ve aynı zamanda derin birleştirme yapıyor.Örnek için

:

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); 

Sonuç:

{"apple":0,"banana":{"price":200},"cherry":97,"durian":100} 
İlgili konular