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 混合应用程序?
在 Native App Container (Android, IOS) 中为混合应用加载外部内容