-
Notifications
You must be signed in to change notification settings - Fork 126
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
实际使用时遇到的问题想讨论下. #1
Comments
这个算是 WebKit 的一个缺陷吧。首先 WebKit 进程是独立于 app 进程之外的,两个进程之间使用消息队列的方式进行进程间通信。比如 app 想使用 WKWebView 加载一个请求的话,就要把请求的参数打包成一个 Message,然后通过 IPC 把 Message 交给 WebKit 去加载,反过来 WebKit 的请求想传到 app 进程的话(比如 URLProtocol ),也要打包成 Message 走 IPC。出于性能的原因,打包的时候 HTTPBody 和 HTTPBodyStream 这两个字段被丢弃掉了,这个可以参考 WebKit 的源码(虽然是 mac 的但是我想 iOS 应该也一样),这就导致 -[WKWebView loadRequest:] 传出的 HTTPBody 和 NSURLProtocol 传回的 HTTPBody 全都被丢弃掉了。 所以如果通过 wk_registerScheme 注册了 http scheme,那么由 WebKit 发起的所有 http POST 请求就全都无效了,这个从原理上就是无解的,不过放到 header 里面还是可以的= =。总之这个方法还是只适合用来注册自己定义的 scheme,WebKit 坑还是挺多的😓 |
恩 之前查阅的资料,确实有看到苹果为了性能原因,回传时HTTPBody和HTTPBodyStream为空了. 谢谢您的回复~ 坑再一点一点踩吧... 感谢~~ |
当加载 [(UIWebView*)self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://tu.baidu.com"]]]; |
确实有这个问题,加载某些网页的时候会出现异常,比如 http://www.qiushibaike.com/gif/6-33052.html , 不注册协议,点击图片会进入下一页,下一页...balalala. 注册之后会总会进入一个固定的页面,很是头疼, 不知道是否有方法解决@yeatse |
这个代码在Mac OS上使用发现无效,拿到的对象不支持KVC,通过阅读源码发现,这个接口只有ios拥有。 |
我发现了一招,通过hook ajax 来绕过 post 无法带 body 的问题, |
我在使用时,发现内存泄漏很严重,最后导致崩溃。有解吗? |
估计这个只是理论上可行吧 |
@li6185377 你好,imy_installHookAjax这个还是没作用,注入不了。用了URLProtocol后post 的body都是nil包括HTTPBodyStream |
@GabrielOmarBatistuta 请问你解决没,我用了URLProtocol后可以解决ios 11 以下wkwebview携带cookie问题,可是ajax post 的body都是nil包括HTTPBodyStream,请问有解决办法么?感谢🙏 |
楼上imy_installHookAjax这个没细看,但是看他有提到只是针对ajax的,如果是form表单的提交也没戏. @saminlu |
@saminlu 你是要拦截post请求吗? 要拦截的话得在IMYWebProtocol里面自己去实现一个AjaxHandler来进行拦截,而不是在CustomURLProtocol里面拦截 |
请问body为nil的问题,在最后怎么解决的? |
我想利用WKWebview支持NSURLProtocol后实现类似页面广告屏蔽的功能.
但是实际运用时发现,一旦调用wk_registerScheme:方法注册监听scheme后,一些POST的表单提交就会出现问题.即使在canInitWithRequest:方法中设置对于POST请求的request不处理也不能解决问题.
用代理跟踪请求时发现,未使用NSURLProtocol进行拦截的POST请求中,HTTPBody里包含了表单post的数据.但是使用了NSURLProtocol后,这些请求发送出去的时候没有携带参数.导致请求结果与预想的出现偏差.
如果您有解决方案或者思路,可否一起讨论一下.谢谢~
The text was updated successfully, but these errors were encountered: