我實現了一個自定義NSURLProtocol,它允許我使用靜態壓縮版本的網站作爲webView的目標。它隨時打開zip並加載所需的數據。 但問題是,NSURLProtocol似乎不能正確處理相對路徑?這就是我有以下結構: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;
但是,在我的自定義NSURLProtocol的requestURL顯示方案://host/images/sprite.png,缺少資產部分。它工作正常,如果我切換..
部分assets
,但我寧願不必這樣做。
我在這裏發現了同樣的問題:Loading resources from relative paths through NSURLProtocol subclass但這沒有得到答案。
我找不到任何方法來解決這個問題,以便請求正確地解決相對路徑,或之後自己修復路徑(但我需要知道請求源自哪裏,並且沒有運氣)
任何幫助表示讚賞,在此先感謝。
邊注:在使用的main.css @import url("style.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
。 從那裏,我改方案和URL指向ZIP文件:
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)
你對這個問題有什麼想法嗎? https:// stackoverflow .COM /問題/ 44584159/nsurlprotocol子類,變化的URL,自動 – Mrug