JQuery Mobile не работает внутри UIWebView

Я пришел сюда после многих часов поиска решения и пробы различных подходов к устранению этой проблемы, с которой я столкнулся с JQuery Mobile и моим приложением для iPad.

То, что я пытаюсь сделать, это приложение для отчетов с Fusion Charts. Я успешно визуализировал диаграммы в веб-представлениях (UIWebView), используя разные методы и следуя различным примерам, но сейчас я хотел бы выполнить ту же задачу, используя инфраструктуру JQuery Mobile.

Я не использую телефонную связь, и я выполнил все шаги, необходимые для интеграции JQuery Mobile + Xcode (я думаю). Диаграммы загружаются без проблем в моих настольных и мобильных браузерах (iPad, iPhone 4 и iPod Touch 2G), но они никак не загружаются в мой UIWebView (хотя я использую точно такой же код).

Вот что я делаю:

1) Добавление в проект необходимых файлов (JS, CSS и HTML) для их локального использования. После их добавления я перемещаю все с расширением .js из «Компилировать источники» в «Копировать ресурсы пакета». Это выглядит так:

введите здесь описание изображения

введите здесь описание изображения

2) Загрузите мой тестовый файл HTML (page_A1.html) в веб-представление:

введите здесь описание изображения

3) Убедитесь, что все настроено в файле HTML с правильными путями и последней версией фреймворков:

введите здесь описание изображения

4) Сборка и запуск только для получения пустого веб-представления.

Если я тестирую Javascript с таким предупреждением:

введите здесь описание изображения

Он покажет предупреждение, подтверждающее, что Javascript работает:

введите здесь описание изображения

И если я помещу текст в контейнер, где должна отображаться диаграмма:

введите здесь описание изображения

Я получу текст внутри веб-представления:

введите здесь описание изображения

Я также тестировал удаленные ссылки на фреймворк вместо локальных и более старых версий библиотек, но безуспешно. Ничего другого не происходит:

введите здесь описание изображения

Мне кажется очевидным, что

$(document).ready(function(){

не замечается и не вызывается xcode.

Вот что я хотел бы сделать:

введите здесь описание изображения

Я не знаю, что еще тестировать. Если у вас есть какие-либо идеи, я был бы более чем благодарен.


person Juan González    schedule 01.05.2012    source источник


Ответы (2)


Неважно, ребята. Наконец-то я понял.

Здесь меня сыграли некоторые старые привычки времен веб-разработки.

Оказывается, вам не нужно указывать внутреннюю структуру каталогов для ваших файлов CSS и JS, так что это:

<link rel="stylesheet" href="css/jquery.mobile-1.1.0.min.css" />

<script src="js/jquery-1.7.2.min.js"></script>

<script src="js/jquery.mobile-1.1.0.min.js"></script>

в Xcode действительно должно быть так:

<link rel="stylesheet" href="jquery.mobile-1.1.0.min.css" />

<script src="jquery-1.7.2.min.js"></script>

<script src="jquery.mobile-1.1.0.min.js"></script>

Невероятно, сколько времени мне понадобилось, чтобы это выяснить.

Теперь это работает.

person Juan González    schedule 01.05.2012
comment
У меня такая же проблема, но с аккордеонным тестом. Можешь мне помочь? - person Gustavo Barbosa; 12.04.2013
comment
Вам уже не помогла размещенная здесь информация? Если нет, то какая у вас конкретно проблема? - person Juan González; 13.04.2013
comment
Если вы не установите флажок Создать ссылки на папки для добавленных папок при добавлении файлов в проект. - person Miles; 23.09.2013
comment
Один из тех моментов.. Гах. Тратить часы на разочарование, выясняя, что это было очевидное решение - person K. Kilian Lindberg; 04.01.2014
comment
Что, если вы хотите, чтобы он работал с папками? Как ты это делаешь? Это единственный способ, которым Майлз прокомментирует ответ? - person Joseph Astrahan; 03.11.2016

Правильный способ сделать это — загрузить файл JS как строку и вызвать метод UIWebView [stringByEvaluatingJavascriptFromString:@"Javascript here..."].

 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"content" ofType:@"js" inDirectory:@""];
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
NSString *jsString = [[NSMutableString alloc] initWithData:fileData encoding:NSUTF8StringEncoding];

[webView stringByEvaluatingJavaScriptFromString:jsString];

Хотя это не сильно отличается от жесткого кодирования их в html-файлы, оно делает его еще более модульным. Удачного кодирования :)

person Brad Cypert    schedule 07.08.2012