1

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)
4

2 に答える 2

0

これは、リクエストまたは HTML をロードする方法を指している可能性があると思います。リクエストのコードを貼り付けていただけますか? HTML をローカルにロードするので、それに応じて baseURL を設定することを忘れないでください。そうしないと、相対パスが機能しなくなります。

たとえば、次のとおりです。

[self.webView loadHTMLString:html baseURL:[NSURL URLWithString:@"host"]];
于 2014-04-01T09:42:19.620 に答える