Когда я реализую метод делегата definePolicyForNavigationAction, запрос Post будет недействительным в WKWebView - PullRequest
0 голосов
/ 19 декабря 2018

моя системная версия - 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];

, но если я реализую метод делегата definePolicyForNavigationAction наподобие down, сервер nodejs не сможет получить какие-либо почтовые данные

-(void)webView:(WKWebView *)webView decidePolicyForNavigationAction: 
  (WKNavigationAction *)navigationAction decisionHandler:(void (^) 
  (WKNavigationActionPolicy))decisionHandler{
       decisionHandler(WKNavigationActionPolicyAllow);
  }

и я хочу повторно использовать объект wkwebview, у кого есть хорошая идея?

дополнительно я обнаружил, что при первой загрузке запроса post и обратно, затем перезагрузке и повторной загрузке снова, это всегда работает правильно, но если я повторно используюwkwebview загружает любой другой URL-адрес, например, Google, тогда он больше не может загружать запрос на публикацию. Если не реализован метод делегата definePolicyForNavigationAction, он всегда будет работать нормально.Итак, это конфликт между definePolicyForNavigationAction и повторным использованием 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];

}

1 Ответ

0 голосов
/ 19 декабря 2018

Я исправляю это, добавляя код

self.navigationDelegate = nil

в функцию webFormat. Даже когда функция webFormat запускается, self.navigationDelegate уже равен нулю, я думал, что при удалении viewController, как навигационный элемент wkwebview,оставил что-то в углу и повлияет на следующую загрузку веб-просмотра. Кто знает.

...