我正在将远程网页加载到依赖于 js 和 css 资产的 iOS webview 中。为了提高性能,特别是在 3G 网络上,我希望将这些资产从本地文件调用到 iOS 设备。
支持 iOS 应用的网站也被手机浏览器使用,而不仅仅是 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"];
}
如果这是一种明智的方法,我会坚持如何将 fileToLoad NSBundle 传递到 webView 的 loadRequest 中,因为它需要一个 URL。