javascript - 如何将 UIWebView javascript 异常的 sourceId 与源文件相关联?

标签 javascript iphone uiwebview stringbyevaluatingjavascr

简短的问题:异常的“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] 运行良好并返回一个 JSON 字符串,其中包含“js”代码中最后一条语句的评估结果。

现在,如果在评估期间发生不好的事情,我会得到一个 JSONified 异常对象。例如,如果“js”代码中出现语法错误,我会得到如下信息:

{"message":"Parse error","line":1,"sourceId":26121296}

这对于跟踪问题已经非常有用了......

但是,当我通过 runJS: 运行多个字符串时,我希望能够查明是哪个字符串导致了异常(因为运行时错误可能来自于在之前的函数中创建的函数javascript代码字符串)。这个“sourceId”属性看起来很有趣,但我找不到它指向什么。它看起来像一个指针地址(类似于指向其他对象的指针的值),但它与我传递给计算器的任何字符串都不匹配。我怎样才能建立这个链接?

奖励积分:是否有任何关于 UIWebView 特定 javascript 环境的文档可用,比如这个异常对象? Safari Web Content Guide很好,但不涉及此类细节。

最佳答案

最坏情况的解决方案:

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

(希望有人能找到更好的方法并帮助掩埋这个丑陋的答案!)

关于javascript - 如何将 UIWebView javascript 异常的 sourceId 与源文件相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2040033/

相关文章:

在具有本地 .js 文件的 WKWebView 上通过 `evaluateJavaScript` 调用函数时出现 JavaScript 异常

javascript - 如何避免在客户端舍入长值?

iphone - iOS 7 中导航 Controller 及其 Root View Controller 的奇怪行为

php - Javascript不会拉取php变量吗?

iphone - Objective-C run loop停止和重启的方法?

iPhone 和 Webapp 通过 iCloud 同步 ??

ios - 在对 canInitWithRequest 的 YES 响应后,不要求加载 NSURLProtocol

javascript - 在 iOS 10 中获取网页 View 的高度

javascript - Webpack JSX 无法通过 ES6 导入解析相关模块

javascript - 匹配嵌套对象 JS、jQuery 中的值的最佳方法