一尘不染

FF 13,IE 9:JSON字符串化/地理位置对象

json

我正在尝试让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表现出相同的行为。


阅读 208

收藏
2020-07-27

共1个答案

一尘不染

这是在默认情况下,JSON.stringify仅查看对象自己的属性。

而且根据DOM规范,所有DOM属性实际上都存在于对象的原型中。

IE和Firefox通过将属性放在原型上来正确实现规范。Chrome和Safari不会:它们直接将属性放在对象上。这样可以使这种情况有效,但会破坏其他内容(例如,钩住属性获取器和设置器的能力)…。

有人说要向某些DOM对象添加toJSON方法,以使它们具有更合理的JSON.stringify行为。

2020-07-27