博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何从 Xcode 控制台输出 JavaScript 的 log?
阅读量:5919 次
发布时间:2019-06-19

本文共 1698 字,大约阅读时间需要 5 分钟。

调试 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 名,例如: 。我们可以通过 Apple 提供给我们的黑科技 NSURLProtocl 截获所有从 UIWebView 发起的请求。如果请求里有 「debugger」,就是用 NSURLProtocol 调用 NSLog 打印这些 log。

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

接下来,创建一个 NSURLProtocol 的子类 WebConsole

/WebConsole.h@interface WebConsole : NSURLProtocol+ (void) enable;@end//WebConsole.m@implementation WebConsole+ (void) enable {  [NSURLProtocol registerClass:[WebConsole class]];}+ (BOOL) canInitWithRequest:(NSURLRequest *)request {  if ([[[request URL] host] isEqualToString:@"debugger"]){    NSLog(@"%@", [[[request URL] path] substringFromIndex: 1]);  }  return FALSE;}@end

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

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

- (void)viewDidLoad {  [super viewDidLoad];  [WebConsole enable];  NSError *error = nil;  NSString *htmlStr = [NSString stringWithContentsOfFile:    [[NSBundle mainBundle]      pathForResource:@"Sample" ofType:@"html"]      encoding:NSUTF8StringEncoding      error:&error];  [self.webView loadHTMLString:htmlStr baseURL:nil];}

以真实用户体验为度量标准进行 ,监控网络请求及网络错误,提升用户留存。访问 感受更多应用性能优化体验,想阅读更多技术文章,请访问 OneAPM 。

本文转自

转载地址:http://iudvx.baihongyu.com/

你可能感兴趣的文章
过早优化是万恶之源
查看>>
yum源配置
查看>>
导航标签
查看>>
struts2 validator验证随笔
查看>>
android 360度旋转
查看>>
RMAN-20207
查看>>
bash脚本进阶练习题
查看>>
Python 操作LDAP实现用户统一认证密码修改功能
查看>>
How-to monitor Docker ?
查看>>
redis相关简介
查看>>
Akka 和 Storm 的设计差异
查看>>
day9-01 线程
查看>>
ASF(一)
查看>>
SQLite简单使用
查看>>
无刷新更改包含UpdatePanel的ajaxtoolkit:TabPanel 的 HeaderText属性
查看>>
rsync 同步数据
查看>>
[Ajax-相濡以沫,不如相忘于江湖] Ajax初识
查看>>
Apache中配置SSI
查看>>
[日更-2019.4.20、21] cm-14.1 Android系统启动过程分析(二)-Zygote进程启动过程
查看>>
WordPress android开源项目 源码
查看>>