短的问题:什么异常的“的sourceID”指的是,我怎么能链接到相关的源字符串/文件

更长的故事:

我通过[UIWebView stringByEvaluatingJavaScriptFromString:]运行在iPhone本机应用程序的JavaScript代码。为了帮助开发,后来检查用户提供的代码,我用下面的函数来安全地运行任何代码:

// Inside @implementation MyJS
- (NSString *)runJS:(NSString *)js {
    // Do some escaping on 'js' to make it look like a string literal.
    js = escape(js);
    NSString *result =
        [webView stringByEvaluatingJavaScriptFromString:
            [NSString stringWithFormat:@"try { JSON.stringify(eval(\"%@\")); } except (e) { JSON.stringify(e); }", js]
        ];
    return result;
}

如果一切正常,[MyJS runJS:js]运行良好,并在“JS”代码返回包含的最后一个语句的评价的结果的JSON字符串。

现在,如果不好的事情在评估过程中发生的,我得到一个JSONified异常对象。例如,在“JS”代码语法错误的情况下,我得到这样的:

  

{ “消息”: “解析错误”, “线”:1, “的SourceID”:26121296}

这已经是相当有用的跟踪问题...

然而,正如我通过runJS:运行多个字符串,我想能够查明哪一个引起了异常(因为运行时错误可能来自这是在先前的JavaScript代码字符串创建函数)。这个“的sourceID”属性看起来很有趣,但我找不到它指向。它看起来像一个指针地址(类似的价值指向其他对象),但它不与任何我已经传递给评价者的字符串相匹配。我怎样才能让这个链接?

有关奖励积分:是否有可用的关于UIWebView的特定JavaScript环境的任何文件,像这样的异常对象?该 Safari网页内容指南是好的,但不进入这样的细节。

有帮助吗?

解决方案

最差情况下的解决方案:

在每个js的字符串被评估,添加一些代码抛出异常,捕获它,提取的SourceID并以某种方式公开它使得runJS:方法可以保持其中的SourceID与哪个串的记录。

(希望有人会找到一个更好的办法,帮助埋葬这个丑陋的答案!)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top