HTML 5 + iOS — создание гибридных приложений

Я пытаюсь преобразовать свое собственное приложение для iOS в гибридное приложение с использованием HTML 5. Проведя исследование, я остановился на jQuery mobile + phoneGap.

Мои вопросы

  1. Можно ли смешивать html 5 и собственные функции iOS в одном представлении? Например, могу ли я использовать текстовое поле html, чтобы получить значение и использовать его для преобразования с помощью средства выбора iOS.
  2. Можно ли перейти на собственный xib с html-страницы?
  3. И, наконец, есть ли лучшее решение для создания гибридного приложения?

заранее спасибо


person Clement Prem    schedule 26.06.2012    source источник
comment
1 - Возможно, но функции iOS будут поверх веб-представления 2 - Возможно, но вы должны убедиться, что веб-представление не выгружается   -  person nhahtdh    schedule 26.06.2012
comment
@nhahtdh спасибо за ответ. Можете ли вы предложить мне несколько учебников по вышеуказанным темам.   -  person Clement Prem    schedule 26.06.2012
comment
Проверьте, существуют ли существующие плагины, которые вы можете использовать или модифицировать. В противном случае, я думаю, вам придется написать свой собственный плагин.   -  person nhahtdh    schedule 26.06.2012


Ответы (2)


  1. Да, вы можете смешивать нативные функции iOS в одном «представлении». Если вы хотите вставить собственное средство выбора iOS в веб-представление, это на самом деле невозможно. Как упоминалось в nhahtdh, любые добавленные вами нативные представления iOS будут размещены поверх вашего HTML5 UIWebView. Чтобы выполнять такие задачи, вам нужно освоить общение через Javascript. См. такие фреймворки, как https://github.com/diy/conduit, чтобы узнать, как легко общаться между ObjC. и Javascript для передачи значений туда и обратно между нативным и HTML.

  2. Можно выполнять навигацию со страниц HTML (например, при переходе по ссылкам), настроив приложение iOS для отслеживания определенных запросов URL и выполнения некоторых действий на их основе. Для этой цели я использовал NSURLCache. Итак, если вы хотите, чтобы ссылка в вашем HTML инициировала загрузку xib-файла, вы можете следить за тем, чтобы этот URL-адрес запрашивался через NSURLCache, и загружать xib, когда вы его видите. Эта ссылка помогла мне освоить эту технику.

  3. Насколько я понимаю, все гибридные платформы iOS + HTML используют этот общий метод создания REST-подобного набора URL-запросов, которые могут быть проанализированы системой, подобной NSURLCache, и запускать собственные события на основе этих URL-адресов. Хотя использование существующего фреймворка может сэкономить вам время, не так уж сложно реализовать себя для более простых функций. Однако большие фреймворки могут помочь вам наряду с более продвинутым кэшированием ресурсов HTML.

person jimt    schedule 26.06.2012
comment
Для 2) вы также можете расширить функцию делегата UIWebView и определить свой собственный протокол для сигнализации о загрузке xib (что аналогично тому, что Cordova делает внутри). - person nhahtdh; 26.06.2012
comment
Могу ли я использовать плагин childBrowser для загрузки xib в приложение? - person Clement Prem; 26.06.2012

Может быть, я опаздываю, но ответ на первые два вопроса ДА можно. Вы можете вызвать метод Objective C, который имеет средство выбора, отображающее коды, и навигацию/проталкивание других представлений из вашей сети с Javascript. Вам просто нужно отслеживать их в своем родном приложении с помощью UIWebViewDelegate. Вот пример, как я это сделал:

// В вашем файле Javascript, внутри метода, из которого вы хотите вызвать Pickerview или хотите отправить другое собственное представление

       var iframe = document.createElement("IFRAME");
       iframe.setAttribute("src", "js-frame:myObjectiveCFunction"; 
      document.documentElement.appendChild(iframe);
       iframe.parentNode.removeChild(iframe);
       iframe = null;

В файле Native Objective-C: включите ‹‹UIWebViewDelegate>>

- (BOOL)webView:(UIWebView *)webView  shouldStartLoadWithRequest:(NSURLRequest *)request
       navigationType:(UIWebViewNavigationType)navigationType {

if ([[[request URL] absoluteString] hasPrefix:@"js-frame:"]) {
    // Extract the selector name from the URL
    NSArray *components = [requestString componentsSeparatedByString:@":"];
    NSString *functionName = [components objectAtIndex:1];
    // Call the given selector
    [self performSelector:NSSelectorFromString(functionName)];
    // Cancel the location change
    return NO;
}
// Accept this location change
return YES;

}

- (void)myObjectiveCFunction {
    // Do whatever you want!
   // show Native picker view
   // Push another native View
}

Точно так же вы даже можете отправить параметры с HTML-страницы в Objective c. // --------------------------------------------------

person Samir Jwarchan    schedule 21.09.2012
comment
Привет, я новичок в iOS. И как новичок я поставил задачу создать гибридное приложение. Обычно я работаю на Android. Для гибридного Android я создаю файлы HTML, файлы JS и CSS, помещаю их в папки и вызываю файл html из контейнера. В данном случае это iOS, не могли бы вы сказать мне, куда я могу поместить файлы HTML и позвонить мне. Если у вас есть демо, не могли бы вы показать мне? - person Debopam Mitra; 21.02.2013