Closed dhui68 closed 4 years ago
NSURLProtocol 拦截处理wkwebview的请求,导致网页中的post请求httpbody,httpbodystream 是空的,才找到你的这个hook方式,但是发现有bug,能处理ajax方式的post请求,但是不能处理form表单的form.submit这种提交,求解决
form表单form.submit走的不是ajax,ajax hook拦截不到。 有两种方式你可以考虑: 1、替换表单的提交为ajax形式 2、增加黑名单机制,针对这类链接不要使用离线包机制
@karosLi 2、增加黑名单机制,针对这类链接不要使用离线包机制 问一下这句什么意思? 使用registerSchemeForCustomProtocol方法,并注册NSURLProtocol子类,来加载本地缓存文件。这个应该是整个APP的行为。怎么通过黑名单,来禁止一些链接使用离线包呢
类似于这样,有一个统一的方法可以开启和关闭离线包功能。是否关闭的逻辑,你可以通过服务器端后台下发一些H5链接的黑名单列表,然后再下面几个入口做判断是否需要关闭离线包功能。
- (void)enableOffineH5:(BOOL)enable {
if (enable) {
_jsBridgeEngine.config.enableAjaxHook = YES;
[NSURLProtocol wkWebView_registerScheme:@"http"];
[NSURLProtocol wkWebView_registerScheme:@"https"];
} else {
_jsBridgeEngine.config.enableAjaxHook = NO;
[NSURLProtocol wkWebView_unregisterScheme:@"http"];
[NSURLProtocol wkWebView_unregisterScheme:@"https"];
}
}
@karosLi decidePolicyForNavigationAction里做开关,不会发生两个webview同时加载,一个开启缓存,一个不需要缓存,发生需要缓存的资源,请求没有发到本地吗?
一般的话还是一个webview在加载,你要是有两个webview同时加载加载场景,那就不行。 不过最好还是建议替换表单的提交为ajax形式,避免开关的维护。
一般的话还是一个webview在加载,你要是有两个webview同时加载加载场景,那就不行。 不过最好还是建议替换表单的提交为ajax形式,避免开关的维护。
大概明白了。谢谢解答
新的版本 KKJSBridge 1.1.1
可以通过 form.submit() 提交表单了
页面中含有