我在我的WordPress網站上使用這個jquery彈出式插件from this link。它在所有瀏覽器上工作正常,但在IE11上出現以下錯誤。獲取錯誤:對象不支持屬性或方法'assign'
任何幫助深表感謝。
我在我的WordPress網站上使用這個jquery彈出式插件from this link。它在所有瀏覽器上工作正常,但在IE11上出現以下錯誤。獲取錯誤:對象不支持屬性或方法'assign'
任何幫助深表感謝。
這些錯誤通常發生在某些html元素標識與JavaScript函數中某個變量具有相同標識時。更改其中一個代碼工作的名稱後。
作爲每文檔,Object.assign()是一種新技術,在2015年的ECMAScript(ES6)的一部分標準
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/assign
而且,IE不支持它。
如何實現像https://www.npmjs.com/package/event-source-polyfill這樣的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(只需刪除polyfill即可獲得與您的頁面相同的錯誤)。
爲什麼它使用單個'!='而不是更安全的'!=='? –
@安德烈 - 伊里奇有正確的回答你的問題,但你問錯了問題:
爲什麼不僅僅是使用支持IE的jQuery插件,如Zurb的優秀Reveal:https://github.com/zurb/reveal
它會做everythi你想要的,而不是拋出這個錯誤。
@約翰母鹿
我從要實現這點/反應堆您的評論想通了。這與原來的問題有很大不同,你應該問自己;)
反正,你需要做什麼...
你可以使用[es6-object-assign] [1]。這是一個ES6 Object.assign()「polyfill」。
首先,在你的根文件夾package.json
,添加es6-object-assign
作爲一個依賴:
"dependencies": {
"es6-object-assign": "^1.0.2",
"react": "^0.12.0",
...
},
然後,如果你想在節點環境中使用使用它:
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
無論如何回到主題上,我目前正在編寫版本2,這是一個大的重寫,並增加了對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>");
我有黑客拿出:
//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.assign
不是所有瀏覽器都支持,但是,它是可能的在Object
的情況下重新分配它當前瀏覽器不支持的情況。
這是做一個polyfill函數,其行爲方式與ESE的Object.assign(target, ...)
相同。
我認爲最好的辦法是target
後遍歷每個參數,arguments
對象的每個屬性分配給target
,考慮對象和數組之間的迭代,以避免造成引用。可選地,爲了不丟失實例,您可以檢測屬性的最後一個實例是否僅等於"Array"
或"Object"
,並且如果您計劃創建新引用但不會丟失Image
接口(例如)這些實例仍然是參考。
編輯:原始Object.assign
不以這種方式工作。
根據這個解決方案,我有我自己的polyfill,可以找到here。
既然你用jQuery標記了問題,你可以使用jQuery extend函數。不需要polyfill,它也可以進行深度合併。
例如:
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多次在頁面上。 –