UIWebView отображать локально сохраненный веб-сайт (HTML, изображения, Javascript) - PullRequest
5 голосов
/ 01 октября 2009

Я искал ВЕЗДЕ для этого, ничего не могу найти. Мне нужно хранить целый сайт внутри моего iPhone по некоторым интересным причинам. Несмотря на это, я не могу понять, как правильно отобразить его в моем UIWebView.

РЕДАКТИРОВАТЬ: я должен уточнить, я могу загрузить исходный файл HTML, и я изменил все пути, чтобы быть локальным, за исключением того, что ничто не связано в.

Вот код

self.dataDetectorTypes = UIDataDetectorTypeLink;
NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSURL *url = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self loadRequest:request];

index.html имеет кучу <script type="text/javascript" src="somescript.js">

Ни один из кодов JS не выполняется

Ответы [ 6 ]

13 голосов
/ 01 октября 2009

Похоже, вы загружаете HTML-код из вашего пакета. Это означает, что все дополнительные файлы (.js, .css и любые медиа-файлы) также должны присутствовать в вашем комплекте. Поэтому первое, что нужно проверить, - это заглянуть внутрь содержимого вашего исполняемого файла и убедиться, что файлы js и т. Д. Включены.

Если это выглядит нормально, то следует проверить, ссылаются ли файлы html, js или css на контент через относительные или абсолютные URL-адреса. Если в веб-контенте есть ссылка на абсолютный путь, то UIWebView будет пытаться загружать этот контент каждый раз, чтобы он работал только при наличии сетевого соединения. Если путь относительный, то он будет искать в комплекте, чтобы увидеть, существует ли такой файл.

Когда вы включили html и контент в файл проекта XCode, вы, вероятно, перетащили файл (ы) в боковую панель проекта и спросили: «Рекурсивно ли создавать группы для любых добавленных папок» или «Создать ссылки на папки» для любых добавленных папок. "

По умолчанию это первый, который означает, что XCode создает желтую папку в вашем проекте, но он игнорирует иерархию каталогов на диске, когда придет время для создания выходного пакета. Если вы выберете второй вариант, то папка будет синего цвета, и если вы посмотрите в выходной пакет, то увидите, что вся иерархия папок была реплицирована.

Первый работает для простых веб-страниц, где все находится на одном уровне папок, и вы можете использовать метод, который вы перечислили выше, чтобы загрузить его. Второй случай работает лучше, если ваша веб-страница сложная и ссылается на содержимое в подпапках; в этом случае вам необходимо загрузить веб-страницы по относительному пути (скажем, в папке «веб-страницы»):

NSString *path = [[NSBundle mainBundle] 
                 pathForResource:@"index" ofType:@"html" 
                     inDirectory:@"webpages"];

Последнее, что нужно проверить, это наличие каких-либо BASE-тегов в html-файле. Это способ указать адрес или цель по умолчанию для всех ссылок на странице, но он может испортить ссылки веб-просмотра.

7 голосов
/ 14 ноября 2009

Проблема в том, что этот вызов:

NSURL *url = [NSURL fileURLWithPath:path];

не устанавливает baseURL, поэтому относительные пути в файле .html для таких вещей, как javascript, css, изображения и т. Д. Не работают.

Вместо этого используйте это:

url = [NSURL URLWithString: [path lastPathComponent] 
             relativeToURL: [NSURL fileURLWithPath: [path stringByDeletingLastPathComponent] 
                                       isDirectory: YES]];

и затем такие вещи, как "styles.css" в файле index.html, будут найдены, если они скопированы в комплект рядом с файлом .html.

1 голос
/ 01 октября 2009

Вам нужно установить это:

myWebView.dataDetectorTypes = UIDataDetectorTypeLink
0 голосов
/ 13 июня 2014

Моя попытка состояла в том, чтобы запустить всю веб-страницу из файла проекта Xcode. Для этого необходимо:

  1. При импорте файла выберите «Создать ссылки на папки для любых добавленных папок».

  2. Настройте веб-представление, но убедитесь, что вы указали относительный путь, как упоминалось ранее.

    NSString *path = [[NSBundle mainBundle] pathForResource:@"filename" 
                                            ofType:@"html" 
                                            inDirectory:@"Directory"];
    
    NSURL *url = [NSURL URLWithString:[path lastPathComponent] relativeToURL:
          [NSURL fileURLWithPath: [path stringByDeletingLastPathComponent] 
                 isDirectory:YES]];
    
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    [self.currentWebView loadRequest:request];
    
0 голосов
/ 24 января 2013

При добавлении pathFor ресурса в Dictionary он отображает нулевую строковую ошибку.

0 голосов
/ 02 января 2013

Убедитесь, что файлы .js находятся в вашем разделе копировать в пакет ресурсов, а не в раздел компиляции. Xcode по умолчанию помещает их в группу компиляции.

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