2016-02-05 110 views
31

WordPressサイトでこのjqueryポップアッププラグインfrom this linkを使用しています。すべてのブラウザで正常に動作しますが、IE11では次のエラーが発生します。エラー:オブジェクトがプロパティまたはメソッド 'assign'をサポートしていません

enter image description here

すべてのヘルプははるかに高く評価されます。

+2

@JohnDoeは、あなたが作業例を提供することができますか? – Dekel

+2

@pragya、何か問題があると判断できるようにいくつかのコードを書いてください... dom要素が見つからないか、同じidを複数のページに持つ問題です。 –

答えて

60

他の人が述べたように、Object.assign()方法は、IEでサポートされていますが、利用可能ポリフィルがあるされていない、ちょうどあなたのプラグインの宣言「の前に」それを含める:

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

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

テストページから、 :http://jsbin.com/pimixel/edit?html,js,output(ポリフィルを削除して、ページに表示されるエラーと同じエラーになります)。

+2

安全性の高い '!=='ではなく '!='を単独で使用するのはなぜですか? –

6

この問題の可能な解決策:

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

ソース:アンドレス・Ilich @custombox github project

4

は、あなたの質問に対する正しい答えを持っていますが、間違った質問をしている:

なぜZurbの優れたRevealのようなIEをサポートするjQueryプラグインを使用するだけではありません。https://github.com/zurb/reveal

これはすべてを行いますこのエラーをスローしないようにします。

5

@ジョンドウ

私はあなたがノード/スタックを反応でこれを実装したいというあなたのコメントから考え出しました。これは、元の質問は非常に異なっていると、あなたはあなた自身を求めているはずです。とにかく)
、相続人はあなたが何をする必要があるか...

あなたは[ES6-オブジェクト割り当て]を使用することができます[1]。これはES6のObject.assign() "polyfill"です。その後

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

あなたはノード環境での使用でそれを使用する場合:

あなたのルートフォルダにpackage.jsonでまず、依存関係としてes6-object-assignを追加

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

あなたが持っている場合フロント(ブラウザ)で問題が発生しました...
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_modulesnode_modulesほとんどちょうど、あなたが使う決まり文句に依存し、時にはindex.htmlには、あなたが使用する必要があるサブディレクトリにあるときに、../node_modules

3

現在のjQueryに取り組んで自分自身をポップアップ: https://github.com/seahorsepip/jPopup

はすべてを持っていますあなたはポップアップなどを期待しています:D

とにかく話題に戻ると、私は現在、書き換えが大きく、IE6(バージョン1はIE7 +)のサポートを追加していて、同様のエラーに遭遇しました。 ..

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

私が思い付くしなければならなかったハック:基本的には、Object.assignは、すべてのブラウザでサポートされていない

//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に再割り当てしてください。

ポリフィル関数を作成するのは簡単です。これは、ES6のObject.assign(target, ...)と同じように動作します。

私は最善の解決策は、target後に各引数を反復オブジェクトと配列間の反復を考慮し、targetargumentsオブジェクトの各プロパティを割り当て、参照を作成しないようにすることだと思います。オプションで、失われたインスタンスを削除するには、プロパティの最後のインスタンスが"Array"または"Object"に等しいかどうかを検出して、新しい参照を作成する予定の場合はImageインターフェイスを失うことはありませんが、これらのインスタンスは引き続き参照になります。

を編集します。元のObject.assignはこのようには機能しません。

この解決策によれば、私はhereという独自のポリフィルを持っています。

2

jQueryで質問にタグを付けたので、jQuery extend関数を使用できます。ポリフィルを必要とせず、深くマージします。例については

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

結果:

{"apple":0,"banana":{"price":200},"cherry":97,"durian":100} 
関連する問題