Armadilhas encontradas pelo WKWebView

wkwebView definir Cookies

Definir cookies usando a configuração do WKWebView às vezes pode não ser bem-sucedido.
O uso dos métodos a seguir para definir cookies ocasionalmente causará problemas que não podem ser definidos.

NSString *cookie = [NSString stringWithFormat:@"document.cookie = 'session_id=%@'; document.cookie = 'CLIENT=App'; document.cookie = 'domain=test'", accessToken];

    WKUserScript *cookieScript = [[WKUserScript alloc]
                                  initWithSource:cookie
                                  injectionTime:WKUserScriptInjectionTimeAtDocumentStart
                                  forMainFrameOnly:NO];

    [self.configuration.userContentController addUserScript:cookieScript];

Por fim, mude para o método de configuração de solicitação headFile

NSMutableURLRequest *request= [NSMutableURLRequest requestWithURL:url];
        [request addValue:[NSString stringWithFormat:@"session_id=%@", accessToken] forHTTPHeaderField:@"Cookie"];
        [request addValue:[NSString stringWithFormat:@"domain=test"] forHTTPHeaderField:@"Cookie"];
        [self loadRequest:request];

problema de cache

Depois de abrir o webView pela primeira vez, o terminal móvel fará um cache local para facilitar o uso, e o servidor também terá um cache semelhante. Mas, às vezes, o lado do servidor altera as informações ou o lado da Web altera as informações da interface. Muitas vezes abrimos a interface webView no terminal móvel, e ainda é o estado da interface original, causado pelo mecanismo de cache no terminal móvel.
Existem duas maneiras de lidar com esse gráfico:

Resolvido limpando completamente o cache local do WKWebView e solicitando novamente

 //// Optional data
    NSSet *websiteDataTypes = [NSSet setWithArray:@[
                                                    WKWebsiteDataTypeDiskCache,
//                                                    //WKWebsiteDataTypeOfflineWebApplicationCache,
                                                    WKWebsiteDataTypeMemoryCache,
//                                                    //WKWebsiteDataTypeLocalStorage,
//                                                    //WKWebsiteDataTypeCookies,
//                                                    //WKWebsiteDataTypeSessionStorage,
//                                                    //WKWebsiteDataTypeIndexedDBDatabases,
//                                                    //WKWebsiteDataTypeWebSQLDatabases
                                                    ]];
    //// All kinds of data
//    NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
    //// Date from
    NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
    //// Execute
    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
        // Done
    }];

Forçar atualizações ignorando caches locais e remotos quando solicitado

NSURLRequestReloadIgnoringLocalAndRemoteCacheData
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:20];
[self.webView loadRequest:request];

Tipos comuns de cache de solicitação

typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
{
    NSURLRequestUseProtocolCachePolicy = 0,
    NSURLRequestReloadIgnoringLocalCacheData = 1,
    NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented
    NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
    NSURLRequestReturnCacheDataElseLoad = 2,
    NSURLRequestReturnCacheDataDontLoad = 3,
    NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
};

おすすめ

転載: blog.csdn.net/sinat_15735647/article/details/78226619