關于WKWeb加載本地資源

提供幾種思路 wk要拿本地資源圖片舉例

  • 第一種 設置WKWeb可訪問相對路徑(iOS 9之后且最好資源本地化)
[self loadFileURL:htmlURL allowingReadAccessToURL:AccessUrl];
//第一個參數為html的url地址,第二個為可以獲取資源的輔助地址,這個路徑包含html資源和媒體資源就可都訪問到
  • 第二種 沙盒
    WKWeb通過路徑去訪問沙盒圖片,除了temp可以被訪問其他訪問不了(盡量用真機去調試),不是很必要的資源可以這么做

  • 第三種 通過攔截協(xié)議做替換

// 注入

 [NSURLProtocol registerClass:[WKURLProtocol class]];

 //UIWeb就需上面一句代碼 WKweb要使用到如下

    Class cls = NSClassFromString(@"WKBrowsingContextController");
    
    SEL sel = NSSelectorFromString(@"registerSchemeForCustomProtocol:");
    
    if([(id)cls respondsToSelector:sel]) {
#pragma clang diagnostic push
        
#pragma clang diagnostic ignored"-Warc-performSelector-leaks"
        
        [(id)cls performSelector:sel withObject:@"myapp"];
        
#pragma clang diagnostic pop

//上述調用了私有方法可能悲劇,app開發(fā)可以嘗試加密拼接運行時等等,去嘗試繞開


#import <Foundation/Foundation.h>

@interface WKURLProtocol : NSURLProtocol
{
    NSURLRequest *request;
}
+ (BOOL)canInitWithRequest:(NSURLRequest *)theRequest;
@end

#import "WKURLProtocol.h"

@implementation WKURLProtocol

//都是重寫的系統(tǒng)方法
+ (BOOL)canInitWithRequest:(NSURLRequest *)theRequest
{
     //判斷是否是特定協(xié)議,從而進行后面的調用操作
    if ([theRequest.URL.scheme caseInsensitiveCompare:@"myapp"] == NSOrderedSame) {
        return YES;
    }
    return NO;
}

+ (NSURLRequest*)canonicalRequestForRequest:(NSURLRequest *)theRequest
{
    return theRequest;
}

- (void)startLoading
{
    //在此方法中做資源替換
    NSURLResponse *response = [[NSURLResponse alloc] initWithURL:[request URL]
                                                        MIMEType:@"image/png"
                                           expectedContentLength:-1
                                                textEncodingName:nil];
    
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"image1" ofType:@"png"];
    NSData *data = [NSData dataWithContentsOfFile:imagePath];
    
    [[self client] URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
    [[self client] URLProtocol:self didLoadData:data];
    [[self client] URLProtocolDidFinishLoading:self];
    NSLog(@"start loading !");
    
}

- (void)stopLoading
{
    NSLog(@"something went wrong!");
}
@end
  • 第四種 base64 存數據庫 或者 文件
data:image/jpeg;base64/base64字符串
  • 第五種 開啟一個本地webServer
    gayhub
  • 第六種 下載遠程url的Html
[wkwebView loadHTMLString:htmlString baseURL: 資源關聯地址];
  • PS: es6 未轉 也會造成低版本加載不出本地文件
    道阻且長,表面向陽
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,621評論 1 32
  • 一套實用的滲透測試崗位面試題,你會嗎? 1.拿到一個待檢測的站,你覺得應該先做什么? 收集信息 whois、網站源...
    g0閱讀 5,146評論 0 9
  • //iOS一般用oc寫,也可以用swift寫.目前oc還是主流,swift是未來趨勢. OC的理解與特性 OC作為...
    李某lkb閱讀 516評論 0 1
  • 我一生渴望被人收藏好 妥善安放 細心保存 免我驚 免我苦 免我四下流離 免我無枝可依
    思追_cad2閱讀 47評論 0 0
  • 風雪到 暖被難離 我屋子赴考 旺財饑寒難耐 鎖鏈拖地犬聲吠 臘八至 寒梅花開 鄰家女于歸 賓客紛至沓來 爆竹響起鑼...
    廖阿大閱讀 268評論 2 1

友情鏈接更多精彩內容