天天看点

如何从 Xcode 控制台输出 JavaScript 的 log?

调试 uiwebview 中的 javascript 一直以来都是很痛苦的一件事。通常我们会通过下面的方法调试 html 和 javascript。

1、第一种,使用桌面浏览器调试。大多数现代浏览器都有功能强大的调试器,可以通过 console.log() 方法进行调试。

2、如果桌面浏览器不能追踪到这些 log,我们可以从 xcode 启动 ios 模拟器,运行我们的 app。然后,启动 safari 选择 develop > iphone simulator > tieba.baidu.com

如何从 Xcode 控制台输出 JavaScript 的 log?

3.如果你不能在 ios 模拟器上复现问题,也不能从运行在 iphone 真机上的 app 获得 console.log(),要调试 html 或者 javascript 是非常困难的。这篇文章就教你怎么用 nslog 输出 javascript 中的 log。

把 javascript log 转化成 application log

最基本的思路是这样的:为了把 javascript 的 log 现实出来,我们需要给debugger 发出一个 xmlhttprequest,发起一个特殊的请求,把 log 信息当做请求的路径,debugger 当做 host 名,例如: http://debugger/myerror。我们可以通过 apple 提供给我们的黑科技 nsurlprotocl 截获所有从 uiwebview 发起的请求。如果请求里有 「debugger」,就是用 nsurlprotocol 调用 nslog 打印这些 log。

假设你的工程里有一个文件叫做 sample.html

接下来,创建一个 nsurlprotocol 的子类 webconsole

通过 caninitwithrequest 检查截获的请求,如果请求的 host 是「debugger」就用 nslog 把这个请求的 「path」(也就是 javascript 的 log)输出。

最后我们只需要在 uiwebview 加载请求之前调用 enable,注册这个类,就能够通过拦截 uiwebview 发起的请求打印 javascript 的 log 了。

oneapm mobile insight 以真实用户体验为度量标准进行 crash 分析,监控网络请求及网络错误,提升用户留存。访问 oneapm 官方网站感受更多应用性能优化体验,想阅读更多技术文章,请访问 oneapm 官方技术博客。

本文转自 oneapm 官方博客

继续阅读