WordPressサイトでこのjqueryポップアッププラグインfrom this linkを使用しています。すべてのブラウザで正常に動作しますが、IE11では次のエラーが発生します。エラー:オブジェクトがプロパティまたはメソッド 'assign'をサポートしていません
すべてのヘルプははるかに高く評価されます。
WordPressサイトでこのjqueryポップアッププラグインfrom this linkを使用しています。すべてのブラウザで正常に動作しますが、IE11では次のエラーが発生します。エラー:オブジェクトがプロパティまたはメソッド 'assign'をサポートしていません
すべてのヘルプははるかに高く評価されます。
これらのエラーは、通常、一部のhtml要素IDがJavaScript関数内の変数と同じIDを持つ場合に発生します。それらのうちの1つの名前を変更した後、コードが機能しました。
出典:SCRIPT438: Object doesn't support property or method IE
その他のリンク:ドキュメント、Object.assign(1としてjquery validation IE Object doesn't support property
)は、新しい技術、ECMAScriptの2015(ES6)の一部であり、標準
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/assign
また、IEではサポートされていません。
https://www.npmjs.com/package/event-source-polyfillのようなポリフィルをどのように実装しますか?ノード/反応スタックで? –
他の人が述べたように、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(ポリフィルを削除して、ページに表示されるエラーと同じエラーになります)。
安全性の高い '!=='ではなく '!='を単独で使用するのはなぜですか? –
この問題の可能な解決策:
Add the script legacy.min.js before the custombox.min.js
ソース:アンドレス・Ilich @custombox github project
は、あなたの質問に対する正しい答えを持っていますが、間違った質問をしている:
なぜZurbの優れたRevealのようなIEをサポートするjQueryプラグインを使用するだけではありません。https://github.com/zurb/reveal
これはすべてを行いますこのエラーをスローしないようにします。
@ジョンドウ
私はあなたがノード/スタックを反応でこれを実装したいというあなたのコメントから考え出しました。これは、元の質問は非常に異なっていると、あなたはあなた自身を求めているはずです。とにかく)
、相続人はあなたが何をする必要があるか...
あなたは[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_modules
はnode_modules
ほとんどちょうど、あなたが使う決まり文句に依存し、時にはindex.htmlには、あなたが使用する必要があるサブディレクトリにあるときに、../node_modules
現在の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();
が、しかし、それが可能です現在のブラウザではサポートされていない場合はObject
に再割り当てしてください。
ポリフィル関数を作成するのは簡単です。これは、ES6のObject.assign(target, ...)
と同じように動作します。
私は最善の解決策は、target
後に各引数を反復オブジェクトと配列間の反復を考慮し、target
にarguments
オブジェクトの各プロパティを割り当て、参照を作成しないようにすることだと思います。オプションで、失われたインスタンスを削除するには、プロパティの最後のインスタンスが"Array"
または"Object"
に等しいかどうかを検出して、新しい参照を作成する予定の場合はImage
インターフェイスを失うことはありませんが、これらのインスタンスは引き続き参照になります。
を編集します。元のObject.assign
はこのようには機能しません。
この解決策によれば、私はhereという独自のポリフィルを持っています。
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}
@JohnDoeは、あなたが作業例を提供することができますか? – Dekel
@pragya、何か問題があると判断できるようにいくつかのコードを書いてください... dom要素が見つからないか、同じidを複数のページに持つ問題です。 –