52 lines
1.7 KiB
Objective-C
52 lines
1.7 KiB
Objective-C
//
|
|
// GDWebURLSchemeHandler.m
|
|
// DESThreeTest
|
|
//
|
|
// Created by Qwerdf on 2025/10/24.
|
|
// Copyright © 2025 zhang alan. All rights reserved.
|
|
//
|
|
|
|
#import "GDWebURLSchemeHandler.h"
|
|
#import "GDWebAssetStorageService.h"
|
|
#import "GDWebPageHookService.h"
|
|
#import "GDWebURLSessionService.h"
|
|
|
|
@implementation GDWebURLSchemeHandler
|
|
|
|
- (instancetype)init {
|
|
|
|
_tasks = [NSMutableDictionary dictionary];
|
|
_schemeStatusDic = [NSMutableDictionary dictionary];
|
|
return self;
|
|
}
|
|
|
|
- (void)webView: (WKWebView *)webView startURLSchemeTask: (id<WKURLSchemeTask>)urlSchemeTask {
|
|
|
|
id<GDWebCustomURLSchemeProtocol> service;
|
|
if ([GDWebAssetStorageService canService:urlSchemeTask]) {
|
|
service = [[GDWebAssetStorageService alloc] initWithSchemeTask:urlSchemeTask];
|
|
}else if ([GDWebPageHookService canService:urlSchemeTask]) {
|
|
service = [[GDWebPageHookService alloc] initWithSchemeTask:urlSchemeTask];
|
|
}else {
|
|
service = [[GDWebURLSessionService alloc] initWithSchemeTask:urlSchemeTask];
|
|
GDWebURLSessionService *webService = (GDWebURLSessionService *)service;
|
|
webService.stopMarkDic = self.schemeStatusDic;
|
|
}
|
|
[self.tasks setValue:service forKey:urlSchemeTask.description];
|
|
[service startLoading:^{
|
|
// GDStrongify(self);
|
|
[self.tasks removeObjectForKey:urlSchemeTask.description];
|
|
}];
|
|
|
|
}
|
|
|
|
- (void)webView: (WKWebView *)webView stopURLSchemeTask: (id<WKURLSchemeTask>)urlSchemeTask {
|
|
[self.schemeStatusDic setObject:@1 forKey:urlSchemeTask.description];
|
|
NSURL *URL = urlSchemeTask.request.URL;
|
|
id<GDWebCustomURLSchemeProtocol> service = self.tasks[URL.absoluteString];
|
|
[service stopLoading];
|
|
[self.tasks removeObjectForKey:urlSchemeTask.description];
|
|
}
|
|
|
|
@end
|