HTML 5 + iOS - 创建混合应用程序

Posted

技术标签:

【中文标题】HTML 5 + iOS - 创建混合应用程序【英文标题】:HTML 5 + iOS - creating hybrid applications 【发布时间】:2012-06-26 05:17:33 【问题描述】:

我正在尝试将我的原生 ios 应用程序转换为使用 html 5 的混合应用程序。 经过研究,我最终选择了 jQuery mobile + phoneGap。

我的问题是

    是否可以将 html 5 和原生 iOS 功能混合在一个单一的 看法?例如,我可以使用 html 文本字段来获取值并使用 它使用 iOS 选择器进行一些转换。 是否可以从 html 页面导航到本机 xib? 最后有没有更好的解决方案来创建混合应用程序?

提前致谢

【问题讨论】:

1 - 可能,但 iOS 功能将位于 Web 视图之上 2 - 可能,但您必须确保 Web 视图未卸载 @nhahtdh 感谢您的回复。你能推荐我一些关于上述主题的教程吗? 检查是否存在可以使用或修改的现有插件。否则,我认为您必须编写自己的插件。 【参考方案1】:

    是的,您可以在单个“视图”中混合原生 iOS 功能。如果您希望将原生 iOS 选择器插入 web 视图,那是不可能的。正如 nhahtdh 所提到的,您添加的任何本机 iOS 视图都将放置在您的 HTML5 UIWebView 之上。要执行这样的任务,您需要掌握通过 javascript 进行的通信。请参阅 https://github.com/diy/conduit 等框架,了解有关如何在 ObjC 和 Javascript 之间轻松通信以在本机和 HTML 之间来回传递值的技术。

    可以从 HTML 页面执行导航(例如单击链接时),方法是设置您的 iOS 应用程序以监视特定的 URL 请求,并根据它们执行一些操作。为此,我使用了 NSURLCache。因此,如果您希望 HTML 中的链接触发加载 xib 文件,您可以观察通过 NSURLCache 请求的 URL,并在看到时加载您的 xib。 This link 帮助我掌握了这项技术。

    据我了解,所有混合 iOS + HTML 框架都使用这种通用技术来建立一组类似 REST 的 URL 请求,这些请求可以由类似 NSURLCache 的系统解析并根据那些网址。虽然使用现有框架可能会为您节省一些时间,但自己实现更简单的功能并不难。不过,大型框架可能会帮助您实现更高级的 HTML 资源缓存。

【讨论】:

对于2),还可以扩展UIWebView的delegate函数,定义自己的协议来表示xib的加载(和Cordova内部做的一样)。 我可以使用 childBrowser 插件将 xib 加载到应用程序中吗?【参考方案2】:

可能我来晚了,但前两个问题的答案是YES你可以。您可以从具有 Javascript 的 Web 调用具有 Picker 显示代码和导航/推送其他视图的 Objective C 方法。您只需要使用 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。 // ------------------------------------

【讨论】:

嘿,我是 iOS 新手。作为新手,我已经完成了创建混合应用程序的任务。我通常在 android 中工作。对于 Hybrid Android,我制作 HTML 文件、JS 和 CSS 文件,将其放入文件夹并从容器中调用 html 文件。在这种情况下,在 iOS 中,你能告诉我在哪里可以放置 HTML 文件并给我打电话吗?如果你有任何演示可以给我看看吗?

以上是关于HTML 5 + iOS - 创建混合应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何从我的 html 文件移动到另一个 html 文件以创建 iOS 混合应用程序?

iOS 混合开发 —— reactNative

使用 Cordova 进行混合移动应用程序开发

在 Native App Container (Android, IOS) 中为混合应用加载外部内容

AngularJS 和 Ionic 用于创建 windows、android 和 iOS 混合应用程序

iOS/Android 上 HTML5 混合应用中持久存储的可靠方法