【发布时间】:2018-12-19 03:05:02
【问题描述】:
我的系统版本是 iOS 11.2.6 但我认为在更高版本中具有相同的外观。 我像这样在 wkwebview 中发布请求,它工作正常
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:self.url]];
request.HTTPMethod = @"POST";
request.HTTPBody = [postStr dataUsingEncoding:NSUTF8StringEncoding];
WKWebView *webView = [[WKWebView alloc]initWithFrame:rectDown];
webview.frame = self.view.frame;
[webview loadRequest:request];
[self.view addSubview:webview];
但是如果我实现了像down这样的decisionPolicyForNavigationAction委托方法,nodejs服务器将无法接收任何发布数据
-(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:
(WKNavigationAction *)navigationAction decisionHandler:(void (^)
(WKNavigationActionPolicy))decisionHandler{
decisionHandler(WKNavigationActionPolicyAllow);
}
我想重用一个 wkwebview 对象,有人有好主意吗?
另外我发现当我第一次加载发布请求然后重新加载然后再次重新加载时它总是正常工作,但是如果我重用 wkwebview 加载任何其他 url 像谷歌然后它不能加载发布请求了.如果不实现委托decisionPolicyForNavigationAction方法,它总是可以正常工作。 那么,这是decisionPolicyForNavigationAction和重用wkwebview之间的冲突吗?
当 wkwebview 的控制器被移除时,我使用此代码格式化重用 wkwebview
-(void)webFormat{
if (@available(iOS 9.0,*)) {
NSSet *websiteDataTypes = [NSSet setWithObjects:WKWebsiteDataTypeDiskCache,
WKWebsiteDataTypeOfflineWebApplicationCache,
WKWebsiteDataTypeMemoryCache,
nil];
// NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
}];
}
[self.configuration.userContentController removeScriptMessageHandlerForName:kScriptHandlerName];
[self.configuration.userContentController removeAllUserScripts];
[self stopLoading];
[self loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
self.scrollView.delegate = nil;
[self setUIDelegate:nil];
}
【问题讨论】:
标签: ios post uiwebview wkwebview