2010-08-31 5 views
26

У меня есть следующий невинно выглядящий код (index.html), но он не загружает файл code.js. Он хорошо работает, если я скопирую/вставляю содержимое файла на страницу HTML. Оба файла index.html и code.js находятся в одном каталоге. Это фрагмент кода. Любая помощь будет большой.UIWebView не загружает внешний файл Javascript

index.html:

<html> 
<head> 
<script type="text/javascript" src="code.js"></script> 
</head> 
<body onload="drawImage()"> 
    <div><canvas id="canvas" width="320" height="480"></canvas></div> 
</body> 
</html> 

ViewController.m:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
// load the first webpage 
[homePageWebView loadRequest:[NSURLRequest requestWithURL:[NSURLfileURLWithPath: 
    [[NSBundle mainBundle] pathForResource:@"index"ofType:@"html"] isDirectory:NO]]]; 
} 

ответ

60

Я обнаружил, что Xcode считает, что файл js необходимо скомпилировать.

Открыть проект в Xcode. Перейдите в «Цели» и посмотрите «Компилировать источники». Если вы видите файл js в этой папке, переместите его в папку «Ресурсы копирования Bundle» и удалите его из папки «Файлы компиляции».

Удалите приложение с вашего iPhone, если оно уже установлено для тестирования. Перейдите в меню «Построение» в «Xcode» и «Очистите все цели». Затем перекомпилируйте.

Установите флажок, чтобы увидеть, действительно ли ваш HTML-файл видит ваш js-файл.

Линда

+0

А где найти «Цели» в Xcode? Я использую последнюю версию, использую ipad dev, и нет такого имени экрана ... – Jason

+0

О, подождите, я нашел его. Это ведро с левой стороны – Jason

+0

ehm ... если вы нашли свой ответ. Пожалуйста, закройте вопрос :) – Tokimon

6

Вы должны прочитать файл HTML в строку и установить BaseUrl при загрузке так относительные пути можно понять.

NSError* error; 
NSString* html = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"] encoding:NSASCIIStringEncoding error:&error]; 

[webview loadHTMLString:html baseURL:[self getBaseURL]]; 

- (NSURL*) getBaseURL { 
    NSString* path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; 
    NSRange r = [path rangeOfString:@"/" options:NSBackwardsSearch]; 
    path = [path substringToIndex:r.location]; 

    path = [path stringByReplacingOccurrencesOfString:@"/" withString:@"//"]; 
    path = [path stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; 
    path = [NSString stringWithFormat:@"file:/%@//",path]; 
    return [NSURL URLWithString:path]; 
} 

Что-то подобное должно работать на вас.

+0

Я думаю, что если вы установили базу в заголовке HTML-документа, он будет работа тоже, и не потребует никакого дополнительного кода. – spbfox

+0

Как установить базовый заголовок для локального файла. Он попытался установить и в , но все равно не работает. Не могли бы вы привести мне пример. – Amarsh

+0

Как вы узнали, какой базовый URL-адрес файла будет раньше времени? Это изменится в зависимости от того, где оно было развернуто. – skorulis

5

Я также столкнулся с той же проблемой: я преодолел его, выполнив простую вещь при добавлении файлов в XCode я сделал небольшое изменение, которое показано на рисунке ниже:

На рисунке ниже, один для добавления файлов HTML, Javascript и CSS, а второй - для общих файлов XCode.

for HTML, Javascript and CSS files

For general XCode files

+0

Спасибо, что исправил это для меня! – phreakhead

+1

Простое и эффективное решение :) – Syn3sthete

6

В дополнение ответ Линды здесь, где вы найдете файлы:

enter image description here

Смежные вопросы