给 Android 和 iOS 的系统 WebView 设置代理的问题

2017-05-15 11:40:19 +08:00
 gouchaoer
业务中需要在安卓和 iOS 的 app 中打开系统默认的 WebView,但是我们需要给 WebView 设置 http 代理,但是安卓和 iOS 都没有提供这样的 API,所以需要用比较 hack 的方法来解决。

在安卓下国内有人用反射做了一部分工作(但是安卓 6.x 似乎不行): http://www.jianshu.com/p/d02e8818a72e

在 iOS 下还没头绪。

但是我看蘑菇街有一篇文章( https://mp.weixin.qq.com/s?__biz=MzA3ODg4MDk0Ng==&mid=2651112324&idx=1&sn=34b15399d6519340f66410445f033e85 ,下拉倒“代理转发”的地方)讲他们给 WebView 设置代理,但是没有讲具体的方法,有人能点拨一下该咋搞么?
5460 次点击
所在节点    程序员
6 条回复
expkzb
2017-05-15 11:52:10 +08:00
那你抓个包看看蘑菇街的 webview 里的 html 代码,感觉无非就是都请求客户端本地的 httpserver,拿到参数后再通过网络库转发出去
JGideon
2017-05-15 12:02:42 +08:00
试下 NSURLProtocol
ctsed
2017-05-15 12:08:16 +08:00
ios 有 shadowrocket,安卓 root 后有 proxydroid
ctsed
2017-05-15 12:09:25 +08:00
哦,无视上面回复。。
kAzec
2017-05-15 12:22:12 +08:00
iOS 的 UIWebView 你需要自定义一个 NSURLProtocol 的子类, 重载 startLoading 函数,用 CoreFoundation 的 API 来设置代理。

Objective-C: http://stackoverflow.com/questions/16847858/ios-any-body-knows-how-to-add-a-proxy-to-nsurlrequest
Swift: http://stackoverflow.com/questions/38968040/how-to-set-proxy-in-web-view-swift

WKWebView 目前(基本上)无解。
pinocc
2017-05-15 12:32:09 +08:00
js 调用 native, native 做代理

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/361373

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX