我正在尝试让Firefox 13将地理位置对象转换为JSON字符串,但是它返回的是空字符串,而不是我的JSON对象的正确字符串表示形式。在最新版本的Chrome和Safari以及Android浏览器中,这可以正常工作。这是我的代码:
if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( function (position) { //Success handler console.log(position); //This outputs the position object to the console var gps = JSON.stringify(position); console.log(gps); //This outputs an empty string! }, function (error) { //Handle error }, { maximumAge: 3000, timeout: 60000, enableHighAccuracy: true } ); } else { //Handle error }
在Chrome中,这将输出地理位置对象和以下字符串:
"{"coords":{"latitude":XYZ,"heading":null,"accuracy":40,"altitudeAccuracy":null,"altitude":null,"longitude":XYZ,"speed":null},"timestamp":1339712284200}"
但是,在Firefox 13中,即使打印到控制台的地理位置对象在所有意图和目的上与Chrome显示的对象相同,输出也只是一个空字符串。对这里出什么问题有任何想法吗?这似乎是一个相关的问题,但是我也没有找到解决方案。顺便说一句,IE9表现出相同的行为。
这是在默认情况下,JSON.stringify仅查看对象自己的属性。
而且根据DOM规范,所有DOM属性实际上都存在于对象的原型中。
IE和Firefox通过将属性放在原型上来正确实现规范。Chrome和Safari不会:它们直接将属性放在对象上。这样可以使这种情况有效,但会破坏其他内容(例如,钩住属性获取器和设置器的能力)…。
有人说要向某些DOM对象添加toJSON方法,以使它们具有更合理的JSON.stringify行为。