iOS WKWebView cookie同步問題

WKWebView cookie同步問題:

利用runtime ?在loadRequest時(shí),先同步一下cookie就可以了!

以下是代碼:

.h

#import

NS_ASSUME_NONNULL_BEGIN

@interface WKWebView (SafeUrl)

+ (void)changeMethodOriginalSelector:(SEL)originalSelector swizzledSelector:(SEL)swizzledSelector;

- (NSURL *)xxx_URL;

- (nullable WKNavigation *)xxx_loadRequest:(NSURLRequest *)request;

@end

NS_ASSUME_NONNULL_END

.m


#import "WKWebView+SafeUrl.h"

@implementation WKWebView (SafeUrl)

+(void)load{

? ? NSString*className=NSStringFromClass(self.class);

? ? NSLog(@"classname%@",className);

? ? static dispatch_once_t onceToken;

? ? dispatch_once(&onceToken,^{


? ? ? ? SELoriginalSelector=@selector(URL);

? ? ? ? SELswizzledSelector=@selector(xxx_URL);


? ? ? ? [self changeMethodOriginalSelector:originalSelector swizzledSelector:swizzledSelector];


? ? ? ? SELoriginalSelector1=@selector(loadRequest:);

? ? ? ? SELswizzledSelector1=@selector(xxx_loadRequest:);


? ? ? ? [selfchangeMethodOriginalSelector:originalSelector1swizzledSelector:swizzledSelector1];


? ? });

}

+ (void)changeMethodOriginalSelector:(SEL)originalSelector swizzledSelector:(SEL)swizzledSelector{

? ? Classclass= [selfclass];


? ? MethodoriginalMethod=class_getInstanceMethod(class,originalSelector);

? ? MethodswizzledMethod=class_getInstanceMethod(class,swizzledSelector);


? ? BOOLdidAddMethod=

? ? class_addMethod(class,

? ? ? ? ? ? ? ? ? ? originalSelector,

? ? ? ? ? ? ? ? ? ? method_getImplementation(swizzledMethod),

? ? ? ? ? ? ? ? ? ? method_getTypeEncoding(swizzledMethod));


? ? if(didAddMethod){

? ? ? ? class_replaceMethod(class,

? ? ? ? ? ? ? ? ? ? ? ? ? ? swizzledSelector,

? ? ? ? ? ? ? ? ? ? ? ? ? ? method_getImplementation(originalMethod),

? ? ? ? ? ? ? ? ? ? ? ? ? ? method_getTypeEncoding(originalMethod));

? ? }else{

? ? ? ? method_exchangeImplementations(originalMethod,swizzledMethod);

? ? }

}

- (NSURL *)xxx_URL{

? ? NSThread *thread = [NSThread currentThread];


? ? if(thread.isMainThread) {

? ? ? ? return [self xxx_URL];

? ? }else{


? ? ? ? dispatch_semaphore_t signal = dispatch_semaphore_create(1);


? ? ? ? __blockNSURL*URL;


? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{

? ? ? ? ? ? URL = [selfxxx_URL];

? ? ? ? ? ? dispatch_semaphore_signal(signal);

? ? ? ? });


? ? ? ? dispatch_semaphore_wait(signal, DISPATCH_TIME_FOREVER);


? ? ? ? returnURL;

? ? }

}

- (nullable WKNavigation *)xxx_loadRequest:(NSURLRequest *)request{

? ? NSMutableURLRequest *muRequest = nil;

? ? if ([request isKindOfClass:[NSMutableURLRequest class]]) {

? ? ? ? muRequest = (NSMutableURLRequest*)request;

? ? }else{

? ? ? ? muRequest = [requestmutableCopy];

? ? }


? ? NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];

? ? NSDictionary *dict = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];

? ? muRequest.allHTTPHeaderFields= dict;

? ? return [self xxx_loadRequest:muRequest];

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容