我的系统版本是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(如google),那么它将无法加载发布请求了。如果不实现委托define.PolicyForNavigationAction方法,它将始终正常运行。 那么,这是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];
}
答案 0 :(得分:0)
我通过添加代码来解决此问题
self.navigationDelegate = nil
在webFormat函数中。即使在运行webFormat函数时,self.navigationDelegate也已经为零;我认为当viewController移除时,作为wkwebview的navigationDelegate,它会在角落留下一些东西并影响webview的下一次加载。