2012-10-16 74 views
0

我正在將遠程網頁加載到依賴js和css資源的iOS webview中。爲了提高3G網絡的性能,我希望將這些資源從本地文件調用到iOS設備。如何使用本地資源加速iOS中的webview?

支持iOS應用程序的網站也被手機瀏覽器使用,而不僅僅是iOS應用程序,所以NSURLRequest註冊我自己的URL前綴(myurl://)並不理想。

我已經有一個啓動mobileSafari針對URL我的域之外的代碼:

- (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]; 

    // ... 

} 

我查看了其他幾個問題(How to use an iPhone webView with an external HTML that references local images?,Dynamically loading javascript files in UIWebView with local cache not working,​​,Using local resources in an 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"]; 
} 

如果這是一個明智的做法,我卡在如何從傳遞一個fileToLoad一個NSBundle到的WebView的loadRequest,因爲這是期待一個URL獲得。

回答

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),但我認爲我走在了正確的道路上。

+0

我使用這個項目作爲指導,我在這方面取得了重大進展。 http://www.cocoawithlove.com/2010/09/substitution-local-data-for-remote.html – user1214836

+0

好吧,cocoawithlove資源使我能夠回答我自己的問題。 – user1214836

相關問題