Coder Social home page Coder Social logo

imywebloader's Introduction

IMYWebLoader

支持对 UIWebView/WKWebView 的资源, 进行 预加载、缓存、拦截 等操作 ... Orz

屁话

UIWebView 缓存控制这块本身很弱,几乎无法用系统API 来完成我们的扩展,于是大家找到了 NSURLProtcol 来进行缓存或者拦截的操作, 总体来说还是满足了大家的需求

iOS8 除了WKWebView 之后更是连 NSURLProtocol 都不支持了,还好 WebKit 是开源的,大家通过搜索发现了 通过注册 CustomScheme,来拦截相应scheme的请求,于是大家进行了 http、https 的拦截

但是由于 WebKit 源码的限制,request body 永远都没法互相传递,

通过大量尝试,使用 fishhook,hook c++虚函数,均已失败告终 最终放弃了在 Native 层的拦截

突然有一天...

突然想到 前端的 post body 请求,大都都是通过 XMLHttpRequest 来请求的,为何我不能在 JS 层去 hook 呢? (还在使用 from 表单的,就让它去屎吧)

hook-ajax 可能支持的没那么全,遇到问题可以帮忙改改,然后提个 pull request (一般的AJAX请求 肯定都是没问题的啦)

懒得写 readme ... 了

功能

  • 支持对 UIWebView/WKWebView 的数据缓存
  • 支持 WKWebView 带 request body 的 AJAX 请求
  • 支持断网后阅读
  • 支持预加载方法,直接解析 html,提前下载其中的静态资源
  • 支持功能实现替换,没写死,都使用协议编程
  • ...

参考

imywebloader's People

Contributors

li6185377 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

imywebloader's Issues

在iOS11.0.3,7plus上,hook ajax会crash

=================================================================
Main Thread Checker: UI API called on a background thread: -[WKWebView evaluateJavaScript:completionHandler:]
PID: 86618, TID: 11993414, Thread name: (none), Queue name: NSOperationQueue 0x1c0221920 (QOS: UNSPECIFIED), QoS: 0
Backtrace:
4 IMYWebLoader 0x00000001021aba04 -[_IMYWKHookAjaxHandler requestCallback:httpCode:headers:data:] + 820
5 IMYWebLoader 0x00000001021ab5dc __41-[_IMYWKHookAjaxHandler requestWithBody:]_block_invoke + 136
6 IMYWebLoader 0x00000001021a027c __88-[IMYWebAjaxHandlerDefaultImpl startWithMethod:url:baseURL:headers:body:completedBlock:]_block_invoke + 528
7 CFNetwork 0x00000001820b2d50 + 32
8 CFNetwork 0x00000001820ca0ec + 152
9 Foundation 0x00000001824f2310 + 16
10 Foundation 0x00000001824329e4 + 72
11 Foundation 0x0000000182422620 + 848
12 libdispatch.dylib 0x000000010225d45c _dispatch_client_callout + 16
13 libdispatch.dylib 0x0000000102269b74 _dispatch_block_invoke_direct + 268
14 libdispatch.dylib 0x000000010225d45c _dispatch_client_callout + 16
15 libdispatch.dylib 0x0000000102269b74 _dispatch_block_invoke_direct + 268
16 libdispatch.dylib 0x0000000102269a34 dispatch_block_perform + 104
17 Foundation 0x00000001824f3fe8 + 376
18 libdispatch.dylib 0x000000010225d45c _dispatch_client_callout + 16
19 libdispatch.dylib 0x000000010226a800 _dispatch_continuation_pop + 592
20 libdispatch.dylib 0x000000010226909c _dispatch_async_redirect_invoke + 628
21 libdispatch.dylib 0x000000010226eb54 _dispatch_root_queue_drain + 616
22 libdispatch.dylib 0x000000010226e880 _dispatch_worker_thread3 + 136
23 libsystem_pthread.dylib 0x0000000181753130 _pthread_wqthread + 1268
24 libsystem_pthread.dylib 0x0000000181752c30 start_wqthread + 4
2017-12-06 15:22:21.031849+0800 IMYWebLoader[86618:11993414] [reports] Main Thread Checker: UI API called on a background thread: -[WKWebView evaluateJavaScript:completionHandler:]
PID: 86618, TID: 11993414, Thread name: (none), Queue name: NSOperationQueue 0x1c0221920 (QOS: UNSPECIFIED), QoS: 0
Backtrace:
4 IMYWebLoader 0x00000001021aba04 -[_IMYWKHookAjaxHandler requestCallback:httpCode:headers:data:] + 820
5 IMYWebLoader 0x00000001021ab5dc __41-[_IMYWKHookAjaxHandler requestWithBody:]_block_invoke + 136
6 IMYWebLoader 0x00000001021a027c __88-[IMYWebAjaxHandlerDefaultImpl startWithMethod:url:baseURL:headers:body:completedBlock:]_block_invoke + 528
7 CFNetwork 0x00000001820b2d50 + 32
8 CFNetwork 0x00000001820ca0ec + 152
9 Foundation 0x00000001824f2310 + 16
10 Foundation 0x00000001824329e4 + 72
11 Foundation 0x0000000182422620 + 848
12 libdispatch.dylib 0x000000010225d45c _dispatch_client_callout + 16
13 libdispatch.dylib 0x0000000102269b74 _dispatch_block_invoke_direct + 268
14 libdispatch.dylib 0x000000010225d45c _dispatch_client_callout + 16
15 libdispatch.dylib 0x0000000102269b74 _dispatch_block_invoke_direct + 268
16 libdispatch.dylib 0x0000000102269a34 dispatch_block_perform + 104
17 Foundation 0x00000001824f3fe8 + 376
18 libdispatch.dylib 0x000000010225d45c _dispatch_client_callout + 16
19 libdispatch.dylib 0x000000010226a800 _dispatch_continuation_pop + 592
20 libdispatch.dylib 0x000000010226909c _dispatch_async_redirect_invoke + 628
21 libdispatch.dylib 0x000000010226eb54 _dispatch_root_queue_drain + 616
22 libdispatch.dylib 0x000000010226e880 _dispatch_worker_thread3 + 136
23 libsystem_pthread.dylib 0x0000000181753130 _pthread_wqthread + 1268
24 libsystem_pthread.dylib 0x0000000181752c30 start_wqthread + 4
(lldb)

post 请求的requestBody 为空

我在您的 demo 中直接填入我要接入的 url,发送 post请求时,requestBody 为空。我哪里理解错了吗?

CSRF

pod 添加之后,什么都不做,
WKWebView load 一个页面,提示 csrf expired
但是 load 百度 首页 就不会出问题,这个有什么解决办法吗?

是这样使用么

看demo 执行imy_installHookAjax就可以?还需要配置什么么?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.