0

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に渡す方法に行き詰まっています。

4

1 に答える 1

0

stringByAppendingPathComponentの出力をURLとして使用できることに気付いた後、私は正しい道を進んでいると思います...

if (![hostname hasSuffix:@".mysite.com"] && navigationType == UIWebViewNavigationTypeLinkClicked) {

    NSString *urlString = [url absoluteString];
    if ([urlString isEqualToString:@"http://path-to-cdn.com/jquery-1.8.2.min.js"]) {
        NSString *tempurl = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"js/jquery-1.8.2.min.js"];
        [webView loadRequest:[NSMutableURLRequest requestWithURL:tempurl]];
    } else {
        [[UIApplication sharedApplication] openURL:url];
    }
    return NO;
}
return YES;

私はまだそれを機能させていません(それはまだリモートURLをロードしています)が、私は正しい道を進んでいると思います。

于 2012-10-17T17:21:25.930 に答える