2016-02-22 3 views
3

Я переношу из UIWebView в WKWebView с помощью своих локальных HTML-файлов в папку документов приложения. Я могу загрузить индексную страницу со всеми файлами css и js, но каждый вызов ajax (xmlhttprequest) терпит неудачу из-за происхождения разрешенного доступа.WKWebView xmlhttprequest с файлом url

Я не хочу использовать веб-сервер в своем приложении, потому что я думаю, что это будет негабарит. Как я могу сделать это возможным? Приложение представляет собой простое приложение HTML5 для домашнего приложения. Устройство не может подключиться к сети или что-то еще, поэтому безопасность может быть отключена полностью.

ответ

1

Это решило мою проблему:

let config = WKWebViewConfiguration() 
config.userContentController = contentController 
config.preferences.setValue(true, forKey: "allowFileAccessFromFileURLs") 
webView = WKWebView(frame: .zero, configuration: config) 
webView.uiDelegate = self 
webView.navigationDelegate = self 
view = webView 
+0

Вау спасибо! После всего этого времени я могу, наконец, перейти от UIWebView к WKWebView. Ваше решение отлично работает для меня. – Tony

1

Для тех, кто пришел, хотя так, чтобы найти эту тему:

Это не официальный, чтобы отключить безопасность в WKWebView, но мы могли бы использовать частный API, чтобы позволить этому так же, как этот парень сделал для Кордова проект: cordova-plugin-wkwebviewxhrfix

Ключ должен создать конфигурацию для WebView и установить свойство allowFileAccessFromFileURLs.

WKWebViewConfiguration* configuration = originalImpSend(_self, selector, settings); 

// allow access to file api 
@try { 
    [configuration.preferences setValue:@TRUE forKey:@"allowFileAccessFromFileURLs"]; 
} 
@catch (NSException *exception) {} 

@try { 
    [configuration setValue:@TRUE forKey:@"allowUniversalAccessFromFileURLs"]; 
} 
@catch (NSException *exception) {} 

return configuration; 

Но, как я уже говорил это частный API, и это может быть причиной отклонить заявку в App Обзор Apple. Если вы хотите опубликовать свое приложение в App Store, попробуйте запустить небольшой HTTP-сервер вместо того, чтобы нарушать общую безопасность веб-представления. Пример: GCDWebServer.

Смежные вопросы