2015-08-28 77 views
0

我想加載一個巨大的JavaScript文件的網頁。如何加載JavaScript文件的本地版本而不是遠程版本?

<script src="js/sample.js"></script> 

我無法更改html文件,但我可以將javascript文件下載到我的應用程序中。

NSString* path = [NSString stringWithFormat:@"http://www.demo.url/index.html"]; 
NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:path] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; 
[webView loadRequest:request]; 

每當我啓動我的應用程序時,chached javascript文件必須重新加載。也許我有錯誤的緩存設置。

兩個可能的解決方案:

  1. 緩存以正確的方式在javascipt的。不要在應用關閉時刪除。
  2. 手動下載JavaScript文件並使用它。
+0

你剛剛試圖加載該JavaScript文件,第二次加載,相同的文件或新刷新的文件會發生什麼? – Jatin

回答

0

我找到了解決辦法:

實現一個自己的NSURL協議:

NSURLProtocolCustom.h

#import <Foundation/Foundation.h> 
@interface NSURLProtocolCustom : NSURLProtocol<NSURLConnectionDelegate> { 
    NSMutableData *responseData; 
} 
@property (nonatomic, strong) NSURLConnection *connection; 
@end 

NSURLProtocolCustom.m

#import "NSURLProtocolCustom.h" 
@implementation NSURLProtocolCustom 
+ (BOOL)canInitWithRequest:(NSURLRequest *)request { 
    if ([[request.URL lastPathComponent] isEqualToString:--Your precached file--]) { 
     return true; 
    } else { 
     return false; 
    } 
} 

+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request { 
    return request; 
} 

- (void)startLoading { 
    NSString* file = --Your local file--; 
    NSData *data = [NSData dataWithContentsOfFile:file]; 
    NSURLResponse *response = [[NSURLResponse alloc] initWithURL:[self.request URL] MIMEType:@"text/javascript" expectedContentLength:-1 textEncodingName:nil]; 
    [self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed]; 
    [self.client URLProtocol:self didLoadData:data]; 
    [self.client URLProtocolDidFinishLoading:self]; 
} 

- (void)stopLoading { 
} 

而且你的要求

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:--your URL-- cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:50.0]; 
[NSURLProtocol registerClass:[NSURLProtocolCustom class]]; 
0

你想要注入JavaScript?

[webView stringByEvaluatingJavaScriptFromString:jsString]; 

,如果你要加載的第1次本地的HTML文件,將它添加到包並調用它liek這樣的:

NSURL *relativeURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]; 
NSURL *u = [NSURL URLWithString:@"xxx.html" relativeToURL:relativeURL]; 

,然後當你需要重新加載你做一個正常uiwebview請求方法調用!

相關問題