1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #import "IONAssetHandler.h"
- #import <MobileCoreServices/MobileCoreServices.h>
- @implementation IONAssetHandler
- -(void)setAssetPath:(NSString *)assetPath {
- self.basePath = assetPath;
- }
- - (void)webView:(WKWebView *)webView startURLSchemeTask:(id <WKURLSchemeTask>)urlSchemeTask
- API_AVAILABLE(ios(11.0)){
- NSString * startPath = @"";
- NSURL * url = urlSchemeTask.request.URL;
- NSString * stringToLoad = url.path;
- NSString * scheme = url.scheme;
- if ([scheme isEqualToString:@"ionic"]) {
- if ([stringToLoad hasPrefix:@"/_app_file_"]) {
- startPath = [stringToLoad stringByReplacingOccurrencesOfString:@"/_app_file_" withString:@""];
- } else {
- startPath = self.basePath;
- if ([stringToLoad isEqualToString:@""] || [url.pathExtension isEqualToString:@""]) {
- startPath = [startPath stringByAppendingString:@"/index.html"];
- } else {
- startPath = [startPath stringByAppendingString:stringToLoad];
- }
- }
- }
-
- NSData * data = [[NSData alloc] initWithContentsOfFile:startPath];
- NSInteger statusCode = 200;
- if (!data) {
- statusCode = 404;
- }
- NSURL * localUrl = [NSURL URLWithString:url.absoluteString];
- NSString * mimeType = [self getMimeType:url.pathExtension];
- id response = nil;
- if (data && [self isMediaExtension:url.pathExtension]) {
- response = [[NSURLResponse alloc] initWithURL:localUrl MIMEType:mimeType expectedContentLength:data.length textEncodingName:nil];
- } else {
- NSDictionary * headers = @{ @"Content-Type" : mimeType, @"Cache-Control": @"no-cache"};
- response = [[NSHTTPURLResponse alloc] initWithURL:localUrl statusCode:statusCode HTTPVersion:nil headerFields:headers];
- }
-
- [urlSchemeTask didReceiveResponse:response];
- [urlSchemeTask didReceiveData:data];
- [urlSchemeTask didFinish];
- }
- - (void)webView:(nonnull WKWebView *)webView stopURLSchemeTask:(nonnull id<WKURLSchemeTask>)urlSchemeTask API_AVAILABLE(ios(11.0)){
- NSLog(@"stop");
- }
- -(NSString *) getMimeType:(NSString *)fileExtension {
- if (fileExtension && ![fileExtension isEqualToString:@""]) {
- NSString *UTI = (__bridge_transfer NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)fileExtension, NULL);
- NSString *contentType = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)UTI, kUTTagClassMIMEType);
- return contentType ? contentType : @"application/octet-stream";
- } else {
- return @"text/html";
- }
- }
- -(BOOL) isMediaExtension:(NSString *) pathExtension {
- NSArray * mediaExtensions = @[@"m4v", @"mov", @"mp4",
- @"aac", @"ac3", @"aiff", @"au", @"flac", @"m4a", @"mp3", @"wav"];
- if ([mediaExtensions containsObject:pathExtension.lowercaseString]) {
- return YES;
- }
- return NO;
- }
- @end
|