WebView のターゲットとして Web サイトの静的圧縮バージョンを使用できるようにするカスタム NSURLProtocol を実装しました。外出先で zip を開き、必要なデータをロードします。しかし、問題は、NSURLProtocol が相対パスで適切に動作しないように見えることです。つまり、私は次の構造を持っています:
assets/css/main.css
assets/css/style.css
assets/images/sprite.png
index.html
: を使用して css から sprite.png を呼び出しますbackground: url(../images/sprite.png) no-repeat;
。..
の部分を切り替えれば問題assets
なく動作しますが、これを行う必要はありません。
ここで同じ問題を見つけました: NSURLProtocol サブクラスを介して相対パスからリソースをロードしていますが、これには答えがありませんでした。
リクエストが相対パスを適切に解決するようにこの問題を修正する方法を見つけることができませんでした。
事前に感謝します。
補足: @import url("style.css");
main.css で使用した同じ問題
編集 :
まず、リモート サーバーから zip ファイルをダウンロードします。
NSURL * fetchURL = [NSURL URLWithString:zipURLString];
[…]
NSString * filePath = [[self documentsDirectory] stringByAppendingPathComponent:fetchURL.path.lastPathComponent];
[zipData writeToFile:filePath atomically:YES];
だから、 からhttp://host/foo/archive.zip
に保存しdocumentsDirectory/archive.zip
ます。そこから、zip ファイルを指すようにスキームと URL を変更します。
NSString * str = [NSString stringWithFormat:@"myzip://%@", zipURL.path.lastPathComponent];
[_webView loadRequest:[NSURLRequest str]];
myzip://archive.zip を開きます。zip ファイルにそのようなファイルが見つからない場合は、現在のパスに /index.html を追加します。NSURLProtocol
したがって、次のリクエストがサブクラスに到着します- (id)initWithRequest:(NSURLRequest *)request cachedResponse:(NSCachedURLResponse *)cachedResponse client:(id < NSURLProtocolClient >)client
。
myzip://archive.zip (Changed to myzip://archive.zip/index.html)
myzip://archive.zip/assets/css/main.css
myzip://archive.zip/styles.css (Problem here)