我在我的WordPress网站上使用了这个jquery弹出插件从这个链接。它在所有浏览器上都可以正常工作,但在IE11上报以下错误。
我在我的WordPress网站上使用了这个jquery弹出插件从这个链接。它在所有浏览器上都可以正常工作,但在IE11上报以下错误。
如其他人所提到的,Object.assign() 方法不支持 IE 浏览器,但是有一个 polyfill 可用,只需在插件声明“之前”包含它:
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/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
测试页面:http://jsbin.com/pimixel/edit?html,js,output(只需删除 polyfill 即可获得与您的页面相同的错误)。
!=
而不是更安全的!==
? - Daniel Kucal<script src="<your-libs-directory>/object-assign-auto.min.js"></script>
- user3456014@John Doe
从你的评论中我得知你想在node/react技术栈中实现这个功能。这与原来的问题非常不同,你应该问自己的问题;)
无论如何,以下是你需要做的...
你可以使用[es6-object-assign][1]。它是一个ES6 Object.assign()“polyfill”。
首先,在你的根目录下的package.json
文件中,将es6-object-assign
添加为依赖项:
"dependencies": {
"es6-object-assign": "^1.0.2",
"react": "^0.12.0",
...
},
如果您希望在Node环境中使用它,请使用:
require('es6-object-assign').polyfill();
<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>");
//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();
<script src="https://cdn.jsdelivr.net/npm/es6-object-assign@1.1.0/dist/object-assign-auto.min.js"></script>
由于您在问题中标记了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}
Object.assign
不被所有浏览器支持,但是在当前浏览器不支持它的情况下,可以在 Object
上重新分配它。arguments
对象的每个属性分配给 target
,考虑对象和数组之间的迭代,以避免创建引用。 可选地,为了不失去实例,您可以检测属性的最后一个实例是否仅等于 "Array"
或 "Object"
,这样做就不会丢失 Image
接口(例如),如果您计划创建新引用,则具有这些实例的对象仍将是引用。
编辑:原始的 Object.assign
不是以这种方式工作的。