ios webview css и гиперссылки не работают в локальных файлах html в контейнере - PullRequest
0 голосов
/ 25 июня 2019

У меня есть структура папок в контейнере для моего приложения ios, как показано ниже (внутри папки «Документы»):

/myfolder  
    /images/background.png
    /meta/style.css
    index.html
    lifestyle.html
    news.html
    weather.html  

Я добавил WKWebview в свое приложение, перетаскивая графический интерфейс в Main.storyboard, и я загружаю index.html в веб-просмотр следующим образом:

NSArray *documentPaths;  
NSString *documentsDir;  
.  
.  
.  
documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
documentsDir = [documentPaths objectAtIndex:0];  
documentsDir = [[NSString alloc] initWithFormat:@"%@", [documentsDir stringByAppendingString:@"/myfolder/index.html"]];  
NSURL *url = [NSURL fileURLWithPath:documentsDir];  
[self.webMyWebView loadFileURL:url allowingReadAccessToURL:url ];  

Webview загружает index.html, но только части html. Он не загружает файл css (который должен отображать изображение в /images/background.png, следовательно, изображение также отсутствует). Гиперссылки есть (синие и подчеркнутые), и ссылки кликабельны (гиперссылки при нажатии получают синий цвет фона), но веб-просмотр не меняется на гиперссылочную страницу (index.html ссылается на lifestyle.html, news.html и weather .html, 3 ссылки на страницу индекса)

style.css загружает изображение как

background: url(../images/background.png)  

Пример ссылки на странице индекса:

<a href="news.html">News</a>    

Как мне получить веб-просмотр для правильной загрузки моего локального html-файла? Я смог загрузить google.com в другую тестовую программу, которую я делал, и ссылки в ней работали просто отлично, поэтому, похоже, проблема с локальным файлом. Похоже, что большинство вопросов, которые я здесь видел, касаются html-файлов, добавляемых в рабочую область xcode как часть проекта (то есть видимую на панели навигатора проекта слева). Я хотел бы отметить, что все мои файлы находятся в контейнере, и любые дополнительные файлы, которые могут быть добавлены в будущем, также должны оставаться в контейнере. Все html-файлы автоматически создаются как часть другого процесса декодирования, поэтому у меня нет возможности изменить содержимое html-файлов.

Что нужно сделать, чтобы загрузить CSS и сделать ссылки на веб-просмотр кликабельными? Мне нужно сделать это в цели C.

1 Ответ

0 голосов
/ 27 июня 2019

У меня есть решение, но я не могу гарантировать, что оно будет работать и для вас.Но я думаю, вы можете попробовать.

Это моя структура каталогов проекта

└─┬WKWebLoadLocalJS
  |
  └─┬WKWebLoadLocalJS
    |
    ├─┬framework7-master
    | |
    | └─┬kitchen-sink
    |   |
    |   └─┬core
    |     |
    |     └──index.html
    |
    ├──AppDelegate.h 
    |    
    ├──AppDelegate.m
    |
    ├──ViewController
    | 
    |
    └ …
- (void)loadLocalJS {
    NSFileManager *fileManager = [NSFileManager defaultManager];
    //Folder path in the project
    NSString *directoryPath = [[NSBundle mainBundle] pathForResource:@"framework7-master" ofType:@""];
    //Tmp cache folder path
    NSString *tmpPath = NSTemporaryDirectory();
    //Create a newDir (any name) folder under the tmp folder
    NSString *newDir =@"newDir";
    [fileManager createDirectoryAtPath:[tmpPath stringByAppendingString:newDir] withIntermediateDirectories:YES attributes:nil error:nil];
    //The path to the newDir folder in tmp
    NSString *tmp_newDir_path = [tmpPath stringByAppendingString:newDir];
    //Copy folder to the tmp/newDir path
    NSError*error;
    NSString*txtPath =[tmp_newDir_path stringByAppendingPathComponent:@"framework7-master"];
    if(![fileManager fileExistsAtPath:txtPath]){
        NSLog(@"***** Copy folder to the tmp/newDir path:%d*****",[fileManager copyItemAtPath:directoryPath toPath:txtPath error:&error]);
    }
    //Tmp/newDir/FeedbackH5/pages/feedback.html full path
    NSString *tmp_newDir_Feedback = [tmp_newDir_path stringByAppendingString:@"/framework7-master/kitchen-sink/core/index.html"];
    //Convert path to URL
    NSURL *feedbackURL = [NSURL fileURLWithPath:tmp_newDir_Feedback];
    //WKWebView
    [self.web loadRequest:[NSURLRequest requestWithURL:feedbackURL]];
}

Если вы не понимаете, вы можете увидеть этот пример .

Надеюсь, он вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...