Не разрешается загружать локальный ресурс: file: ///var/mobile/Containers/Data/Application/03F63826-7849-47C3-A6DF-E1EB1113FF0A/Documents/xxx.png - PullRequest
0 голосов
/ 09 апреля 2019

XCode 10.1
iOS 12.0.1

Я использую функцию wkwebview «valuJavaScript »для обратного вызова URL-адреса изображения, и пусть wkwebview может показать это изображение.
Успешно работает в симуляторе.
Но это сбой в устройстве.
Что с этим не так?

URL симулятора это хорошая работа:

Файл: /// Пользователи / хххххх / Library / Developer / CoreSimulator / Devices / 8FB6E110-F30F-425D-9011-A196E78BE7CB / данные / Контейнеры / Data / Application / E122A32D-7E21-4EBA-A9E7-BC15E8468A11 / Документы / 20190409150915.png

URL устройства неисправен:

Запрещено загружать локальный ресурс: Файл: ///var/mobile/Containers/Data/Application/03F63826-7849-47C3-A6DF-E1EB1113FF0A/Documents/20190408203417.png

NSArray *imagesArray = [[NSArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"pickerImages"]];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];    
NSString *filePath = [NSString stringWithFormat:@"file://%@/",documentsDirectory];
NSString *imagesString = pickerImagesArray.firstObject;
NSString *jscript = @"";

if ([imagesString isEqualToString:@""])
    {
        jscript = [NSString stringWithFormat:@"getimage_cb('%@')" ,  @""];
    } else {
        NSString  *output = [NSString stringWithFormat:@"%@%@",filePath,imagesString];
        jscript = [NSString stringWithFormat:@"%@", [NSString stringWithFormat:@"getimage_cb('%@')" ,  output]];
    }

    [self.myWkwebView evaluateJavaScript:jscript completionHandler:^(id object, NSError * _Nullable error) {
    }];

1 Ответ

0 голосов
/ 09 апреля 2019

На SO есть противоречивые ответы на эту конкретную тему.

Что я прочитал, так это то, что вы можете напрямую загрузить изображение из пакета приложения, но не из его каталога документов.

Один из возможных обходных путей - это загрузить изображение в экземпляр UIImage, преобразовать его в base64 и передать его в методvaluJavascript:

    NSArray *imagesArray = [[NSArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"pickerImages"]];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];    
    NSString *imagesString = [pickerImagesArray firstObject];
    NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, imagesString];

    //Init UIImage Instance
    UIImage *uiImageInstance = [[UIImage alloc] initWithContentsOfFile:filePath];

    //Get PNG Representation as NSData
    NSData *data = UIImagePNGRepresentation(uiImageInstance);

    //Convert to Base64
    NSString *base64Str = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

    //Construct the attribute value we'll pass in the javascript
    NSString *attribute = [NSString stringWithFormat: @"data:image/png;base64,%@", base64Str];

    //Set the image within the webview
    [self.myWkwebView evaluateJavascript: [NSString stringWithFormat: @"document.getElementById('img').setAttribute( 'src', %@);", attribute] completionHandler:^(id object, NSError * _Nullable error) {}];
...