WKWebView не может вызвать ajax для загрузки файла на локальном компьютере.

Я вставляю весь html в WKWebView, все работает, пока я не узнаю, что WKWebView не может загрузить файл xml на локальном компьютере.


$.ajax({
        type: "GET",
        url: "tags.xml",
        dataType: "xml",
        cache: false,
        success: function(xml) {

        },
        error: function() {

            alert("An error occurred while processing XML file.");
        }
    });

мой код для UIWebView

//urlFolder is located locally in a temporary file: tmp/www/htmlFolder 
//urlFile is located in the urlFolder: tmp/www/htmlFolder/index.html
//xml file is located in the urlFolder: tmp/www/htmlFolder/tags.xml


WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
    _webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:theConfiguration];
    [_webView loadFileURL:urlFile allowingReadAccessToURL:urlFolder];

    [self.view addSubview:_webView];

Примечание: я использую XCode7.1 Beta, Objective-C, ios9.1, WKWebView


person chipbk10    schedule 19.10.2015    source источник


Ответы (2)


Из того, что я смог найти, они отключили запросы из разных источников в WKWebViews.

Найдите cors или xhr + WKWebView для получения дополнительной информации об этой проблеме. Я думаю, что это должна быть какая-то ошибка, потому что это всегда было возможно в «обычных» UIWebViews с использованием локальных файлов (например, в вашем примере).

Однако вы можете запустить https://github.com/robbiehanson/CocoaHTTPServer внутри своего приложения, что мне очень нравится. Обязательно добавьте исключение в App Transport Security Settings в вашем файле .plist для localhost.

person Dirk de Boer    schedule 13.11.2015
comment
У меня сама была такая же проблема, с локальным скриптом в wkwebview, выполняющим удаленные запросы, но обслуживание локального файла с сервера в приложении мне не помогло, удаленный сервер теперь вместо этого жалуется, что localhost не находится в разрешенный список. Нужно ли мне что-то делать, чтобы эта работа работала? - person Gusutafu; 09.01.2017
comment
Вам нужно добавить исключение для localhost в запись NSAppTransportSecurity в файле Info.plist в xcode. Это потому, что Apple больше не позволяет веб-просмотру получать доступ к веб-страницам, отличным от https. - person Dirk de Boer; 09.01.2017
comment
Большое спасибо за быстрый ответ! Я попробую это сделать, хотя приложение уже допускает произвольные загрузки (не моя вина!). Я думал, что мне нужно попросить серверных добавить localhost в их заголовки CORS, хотя я не могу понять, возможно ли это или нет. Не могу попробовать до завтра, так что я попробую! - person Gusutafu; 09.01.2017
comment
К сожалению, это не помогло. Я попробую использовать GCDWebserver вместо Swifter. Но проблема, с которой я столкнулся, заключается не в загрузке локального html, а в удаленном ajax, который вызывает его js. Я получаю [Ошибка] XMLHttpRequest не может загрузить apoteket.se/psoapi/minaReceptService/getKundInformation. Источник localhost: 8080 не разрешен Access-Control-Allow-Origin. из в веб-просмотре. - person Gusutafu; 09.01.2017
comment
Ах, я неправильно понял вашу проблему. Да, похоже, им нужно добавить подстановочный знак в заголовки CORS. Не совсем моя область знаний, но в php это что-то вроде: header ('Access-Control-Allow-Origin: *'); надеюсь, это поможет! - person Dirk de Boer; 09.01.2017

Вместо локального сервера вы можете использовать этот плагин, который я сколотил из некоторых примеров кода. Он должен разрешить вам доступ к локальным файлам через XHR. Я использовал его для восстановления доступа к множеству локальных файлов в нашем приложении.

https://github.com/TheMattRay/cordova-plugin-wkwebviewxhrfix

person Matt Ray    schedule 17.04.2017