2009-10-01 2 views
5

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

EDIT:. Я должен уточнить, что я могу загрузить исходный HTML-файл, и я chagned все Pathing быть локальным, кроме ничего не компонуется в

Вот код

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 запускается на выполнение

+0

Что означает "ничего компонуется в" значит здесь? –

ответ

13

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

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

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

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

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

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

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

+0

Это Лора. Я застрял в той же проблеме, и когда пытался использовать решение ура, тогда в моем случае «путь» возвращает нуль. Хотя я добавил файлы и ресурсы html таким же образом, используя второй вариант «Создать ссылки на папки для любых добавленных папок». Что я упускаю. Пожалуйста, помогите мне. Я был бы очень благодарен. – Aisha

+0

Hi Laura. Если метод pathForResource возвращает nil, это означает, что он не может найти файл. Попробуйте найти бинарный файл .app в вашем каталоге «build» в finder, затем щелкните его правой кнопкой мыши и выполните «Показать содержимое пакета». Это показывает, что содержит основной комплект приложения. Загляните в свой HTML-файл. Если он находится в папке, это имя папки должно находиться в параметре «inDirectory» вызова pathForResource. Если он находится на верхнем уровне, то у вас нет ссылки на папку. Удалите и перетащите его в проект или используйте версию pathForResource без inDirectory. НТН. – Ramin

1

Вы должны установить это:

myWebView.dataDetectorTypes = UIDataDetectorTypeLink 
7

Проблема заключается в том, что этот призыв:

NSURL *url = [NSURL fileURLWithPath:path]; 

не настроить BaseUrl и поэтому относительные пути в файл .html для таких вещей, как JavaScript, CSS, изображения и т.д., не работают.

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

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

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

0

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

0

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

0

Моя попытка состояла в том, чтобы запустить всю веб-страницу из файла проекта 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];