2014-12-01 2 views
10

Я тестирование WKWebView с локальным файлом, который работает в тренажере, но он не работает в устройствеWKWebView с локальным файлом

@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]; 
} 

Выдаём URL из:

NSURL *presentationFolder = [self.presentationController url]; 

в порядке, потому что я тестировал тот же код с UIWebview и работает!

Я всегда получаю ту же ошибку:

Could not create a sandbox extension for '/' 

Это не работает, я предполагаю, что это будет работать в Objective-C, как и в быстрой

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

Любая идея будет иметь в виду, , спасибо


Обновление 2-12-2014

Я обнаружил, что это может быть ошибка в прошивкой 8.1 и может быть установлена ​​в 8.2

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

Я проверил перемещение файлов во временную папку, и я не получил какой-либо но webView просто пуст.

Я тестировал один и тот же код (временную папку) с помощью UIWebView и отлично работает!

Кроме того, я попытался это:

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

Как я мог узнать, что это работает, потому что CSS и Javascript является embebed в HTML.

+0

Я не думаю, что это ошибка, она работает на бет и перестал работать на конечный 8.0 релиз, яблоко знает это и еще не исправил его – jcesarmobile

+0

Ну, это хуже, чем ошибка :), хотя, возможно, он работал в бета-версиях, потому что CSS и javascript-код были украшены. Спасибо за ваш комментарий – xarly

+0

Кстати, похоже, что бета-версия 8.2 не может загружать локальные файлы – jcesarmobile

ответ

4

Попробуйте XWebView, у которого очень маленький встроенный сервер http. Он намного меньше, чем GCDWebServer. Метод loadFileURL:allowingReadAccessToURL добавляется через расширение, поэтому вы не знаете о сервере.

1

Это работает как шарм ...

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