js および css アセットに依存する iOS Web ビューにリモート Web ページを読み込んでいます。特に 3G ネットワークでのパフォーマンスを向上させるために、これらのアセットを iOS デバイスのローカル ファイルから呼び出すことを望んでいます。
iOS アプリをサポートする Web サイトは、iOS アプリだけでなく、携帯電話のブラウザーでも使用されるため、NSURLRequest をサブクラス化して独自の URL プレフィックス (myurl://) を登録することは理想的ではありません。
ドメイン外の URL に対して mobileSafari を起動するコードが既にあります。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = [request URL];
NSString *hostname = [url host];
if (![hostname hasSuffix:@".mysite.com"] && navigationType == UIWebViewNavigationTypeLinkClicked) {
[[UIApplication sharedApplication] openURL:url];
return NO;
}
return YES;
}
このメソッドは、次のようなコードで同じコントローラー実装から呼び出されます。
- (void)viewDidLoad {
[super viewDidLoad];
// ...
webView.delegate = self;
// ...
NSURL *url = [[NSURL alloc] initWithString:([path length] > 0 ? path : @"http://mysite.com/mobile/index")];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
[webView loadRequest:request];
// ...
}
他のいくつかの質問を確認しました (ローカル イメージを参照する外部 HTML で iPhone WebView を使用する方法は?、ローカル キャッシュを使用して UIWebView に javascript ファイルを動的にロードする、ローカル イメージ ファイルを使用する iOS WebView リモート html、ローカル リソースでのローカル リソースの使用iPhone webview ) しかし、それらはすべて私の問題の重要な要素を見逃しているようです。
最初のリンクには、有望なものの始まりがあります。
if ([url isEqualToString:@"http://path-to-cdn.com/jquery-1.8.2.min.js"]) {
fileToLoad = [[NSBundle mainBundle] pathForResource:@"jquery-1.8.2.min" ofType:@"js"];
}
それが賢明なアプローチである場合、URLを期待しているため、そのfileToLoad NSBundleをwebViewのloadRequestに渡す方法に行き詰まっています。