基本上,socket.io 使用 nativeJSON 来编码和解码数据包,我的问题是我不得不使用这个改变 JSON 行为的原型(prototype)版本。当我应该进入服务器时:
socket.on('事件', function (a, b, c)
,
我得到
socket.on('event', function ([a, b, c], undefined, undefined)
.
一个解决方案是在 json.js 上注释这行:
/* socket.io-client/lib/json.js
if (nativeJSON && nativeJSON.parse){
return exports.JSON = {
parse: nativeJSON.parse
, stringify: nativeJSON.stringify
};
}
*/
但是这个改变会严重影响性能。
有没有办法恢复原生 JSON 功能? 是否可以创建一个隐藏的 iframe 来克隆 JSON 对象以恢复旧功能?
最佳答案
一种解决方案是终止 Prototype 的 toJSON() 扩展方法:
if(window.Prototype) {
delete Object.prototype.toJSON;
delete Array.prototype.toJSON;
delete Hash.prototype.toJSON;
delete String.prototype.toJSON;
}
那么您应该能够毫无问题地使用浏览器的 native JSON.parse/stringify 方法。
关于javascript - PrototypeJS 版本 1.6.0.2 覆盖 JSON.parse 和 JSON.stringify 并破坏 socket.io 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21236026/