2014-12-01 1 views
10

Ich teste die WKWebView mit lokaler Datei, die im Simulator funktioniert, aber es funktioniert nicht in dem GerätWKWebView mit lokaler Datei

@interface EDPresentationViewController()<WKNavigationDelegate,WKScriptMessageHandler> 


    @property(nonatomic,strong)WKWebView *webView; 

    @property(nonatomic,strong)EDPresentationController *presentationController; 

@end 


@implementation EDPresentationViewController 

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.presentationController = [[EDPresentationController alloc]init]; 

    WKWebViewConfiguration *webConfiguration = [[WKWebViewConfiguration alloc]init]; 
    self.webView = [[WKWebView alloc]initWithFrame:self.view.frame configuration:webConfiguration]; 

    NSURL *presentationFolder = [self.presentationController url]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:presentationFolder]; 

    [self.webView loadRequest:request]; 
} 

gewähre ich die URL aus:

NSURL *presentationFolder = [self.presentationController url]; 

ist in Ordnung, weil ich den gleichen Code mit einem UIWebview getestet habe und funktioniert!

Ich bekomme immer den gleichen Fehler:

Could not create a sandbox extension for '/' 

Dies war nicht arbeiten, ich denke, es in Objective-C, wie in schnellen

iOS Webkit not working on device, but works on simulator at swift

Jede Idee geschätzt wird funktionieren würde dank


aktualisieren 2014.02.12

Ich habe entdeckt, das einen Fehler in iOS 8.1 sein könnte, und es kann in 8,2

https://devforums.apple.com/thread/247777?start=25&tstart=0

ich die Dateien in den temporären Ordner bewegt haben getestet festgelegt werden, und ich habe nicht jede Fehler, aber das WebView ist nur leer.

Ich habe den gleichen Code (temporärer Ordner) mit einem UIWebView getestet und funktioniert gut!

Auch ich das versucht habe:

https://stackoverflow.com/a/26054170/426180

Als ich herausfinden konnte, funktioniert dies, weil die CSS und die JavaScript in den HTML-Code embebed wird.

+0

ich es glaube nicht, ist ein Fehler an dem Betas es funktioniert, und blieb auf den letzten 8,0 Arbeits Release, Apple weiß es und hat es noch nicht behoben – jcesarmobile

+0

Nun, das ist schlimmer als ein Bug :), obwohl es vielleicht in den Betas funktioniert, weil der CSS- und JavaScript-Code eingebettet ist. Danke für Ihren Kommentar – xarly

+0

BTW, es scheint, dass die 8.2 Beta keine lokalen Dateien laden kann – jcesarmobile

Antwort

4

Versuchen Sie XWebView, die einen sehr kleinen eingebetteten HTTP-Server hat. Es ist viel kleiner als der GCDWebServer. Eine loadFileURL:allowingReadAccessToURL Methode wird über die Erweiterung hinzugefügt, sodass Sie den Server nicht kennen.

1

Dieser arbeitete wie ein Charme ...

@interface ViewController() <WKScriptMessageHandler, WKNavigationDelegate> 

...

WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; 
WKUserContentController *controller = [[WKUserContentController alloc] init]; 

configuration.userContentController = controller; 
[configuration.preferences setValue:@"TRUE" forKey:@"allowFileAccessFromFileURLs"]; 
self.webView = [[WKWebView alloc] initWithFrame:[UIScreen mainScreen].bounds configuration:configuration]; 
self.webView.navigationDelegate = self; 
// Also if you'd have bouncing problem 
self.webView.scrollView.bounces = false; 
self.webView.scrollView.alwaysBounceVertical = false; 
[self.view addSubview:self.webView]; 

NSString* productURL = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"htmlapp/home.html"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:productURL]]; 
[self.webView loadRequest:request];