iPhone IOS 10 Safari JSON 解析:错误意外标识符“函数”

Posted

技术标签:

【中文标题】iPhone IOS 10 Safari JSON 解析:错误意外标识符“函数”【英文标题】:iPhone IOS 10 Safari JSON parse:error unexpected identifier "function" 【发布时间】:2016-10-19 16:32:09 【问题描述】:

因此,我正在尝试在客户端站点上解决此错误,该错误仅在移动设备上的 ios 10 上发生。他们说它在将他们的设备升级到 IOS 10 之前工作。恢复到 IOS 9 实际上不会产生这个错误。它似乎是 JSON.parse 以及本地存储数据 (this.local[i]))。有关 js 错误、示例数据和 javascript sn-p,请参见下文。

Javascript 错误:

[Error] SyntaxError: JSON Parse error: Unexpected identifier "function"
parse (Locus.js:40)

数据样本:(this.local)

["ObservationID":"444","Username":"blah","Deleted":0,"Flagged":0,
"ObservationID":"555","Username":"blah","Deleted":0,"Flagged":0]

Javascript:

Locus.prototype.loadFromLocal = function () 
    if (this.local) 
        for (var i in this.local) 
         var len = ('' + this.local[i]).split('').length;
         if (len != 1) 
          this.data[i] = JSON.parse(this.local[i]);
          
         else 
             if (parseFloat(this.local[i]) == this.local[i]) 
                 /* local storage is a number */
                 this.data[i] = parseFloat(this.local[i]);
              
             else 
             
                 /* already parsed */
                 this.data[i] = this.local[i];
             
         
    

【问题讨论】:

【参考方案1】:

我想通了。 IOS 10 似乎会在出错时终止 javascript。我得到的错误是因为我的对象(this.local)中有其他不属于同一类型的项目。所以第一项是上面的json字符串,但第二项是一个数字。当它试图对第二个项目执行 split() 时,它被炸毁了。有趣的是,它不会在任何常见的桌面/mac 浏览器上出错,并且会做它应该做的事情。

解决方法是首先检查项目的类型,使用 typeoftry catch 来区分字符串和 json 字符串。

类型: http://www.javascriptkit.com/javatutors/determinevar2.shtml

json vs 字符串: How to check if it's a string or json

if (typeof this.local[i] == 'number') 

    this.data[i] = parseFloat(this.local[i]);

else if (typeof this.local[i] == 'string')

    try
    
        this.data[i] = JSON.parse(this.local[i]);
    
    catch(e)
    
        this.data[i] = this.local[i];
    

【讨论】:

以上是关于iPhone IOS 10 Safari JSON 解析:错误意外标识符“函数”的主要内容,如果未能解决你的问题,请参考以下文章

想请问,iOS10网页viewport怎么禁止缩放

iOS 7 从 Mobile Safari 访问 iPhone 相机?

网站在 iOS 的 Safari 上崩溃

如何查看iphone6的safari版本号

Safari/iOS/iPhone 上的引导模式问题

如何在 iPhone iOS 的设置中查看 Safari 版本?