如何完全用JavaScript编写iPhone应用程序而又不只是将其变成Web应用程序?
我不想花时间学习Obj-C。我花了7年以上的时间进行Web应用程序编程。是否应该有一种使用WebView并仅使用javascript编写整个应用程序,直接从项目资源中提取文件的方法?
解决方案
回答
我们应该具有用目标C编写的本机包装器。该包装器可能只包含创建WebView并将其导航到Internet(应用程序所在的位置)中给定地址所需的几行代码(如10)。但是在这种情况下,应用程序应该是功能齐全的Web应用程序(我的意思是,不仅使用JavaScript,还使用一些HTML进行标记)。
回答
我遇到了同样的问题。我已经有一个完全用Java编写的游戏。我想制作一个iPhone友好版本,但是Obj-C太过分了。我最终要做的是使用WebView指向iphone应用程序的特殊URL。考虑一下之后,我想我可以将那些文件移到app目录中并在本地运行它们。
回答
当前的Apple API无法做到这一点。最接近的选择是编写一个嵌入Webkit浏览器的简单本机iPhone应用程序。这样一来,我们就可以在本地浏览xhtml / js应用程序。
如果要存储数据,则需要更进一步,并包括一个轻量级的http服务器,该服务器为应用提供服务,并提供存储和检索数据的调用。对于我们来说,这可能不是理想的解决方案,但是,与完整的Obj-C应用程序相比,它的工作量可能更少。
附带说明,Obj-C非常容易学习。 SDK中有大量示例。社区很强大,会毫不犹豫地回答大家提出的问题。
回答
经过四处搜寻,我找到了答案。这是我所做的:
- 在XCode中创建一个新项目。我想我使用了基于视图的应用程序。
- 将WebView对象拖到界面上并调整大小。
- 在WebViewController.m(或者类似名称的文件,取决于视图的名称)内部,在viewDidLoad方法中:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; NSData *htmlData = [NSData dataWithContentsOfFile:filePath]; if (htmlData) { NSBundle *bundle = [NSBundle mainBundle]; NSString *path = [bundle bundlePath]; NSString *fullPath = [NSBundle pathForResource:@"index" ofType:@"html" inDirectory:path]; [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:fullPath]]]; }
- 现在,我们添加为项目资源的任何文件都可以在Web应用程序中使用。我有一个index.html文件,其中包括javascript,css和图像文件,都没有问题。到目前为止,我发现的唯一限制是我无法创建新文件夹,因此所有文件都使资源文件夹杂乱无章。
- 绝招:确保已将文件添加为XCode中的资源,否则该文件将不可用。我一直在XCode中添加一个空文件,然后将我的文件拖到查找器的顶部。那一直在为我工作。
注意:我认识到Obj-C一定不难学习。但是,由于我已经在JS中安装了该应用程序,并且知道它可以在Safari中运行,因此对我来说这是一个更快的开发周期。有一天,我确定我必须分解并学习Obj-C。
我发现其他一些有用的资源:
从javascript调用Obj-C:从javascript调用Objective-c
从Obj-C调用javascript:针对网络黑客的iphone应用开发
从应用程序捆绑中读取文件:uiwebview
回答
对于在iPhone 2.1(也许是2.0)上执行此操作的用户,我们不需要为本地数据存储创建任何特殊服务。 MobileSafari似乎支持HTML5 / WHATWG SQL数据库API。这是最新版本的桌面Safari和Firefox支持的相同API。
如果我们使用的Dojo或者ExtJS之类的工具包提供了存储抽象,则代码应该可以在任何现代浏览器(包括MobileSafari)上运行。
要进行测试,请在iPhone上打开http://robertsanders.name/dev/stackoverflow/html5.html。
如果打开该页面,然后查看越狱iPhone的文件系统,则应该在/ private / var / mobile / library / WebKit / Databases /中看到一个数据库。那里甚至还有一个通过网络打开的数据库的目录。
root# sqlite3 /private/var/mobile/Library/WebKit/Databases/Databases.db SQLite version 3.5.9 Enter ".help" for instructions sqlite> .databases seq name file 0 main /private/var/mobile/Library/WebKit/Databases/Databases.db sqlite> .tables Databases Origins sqlite> select * from Databases; 1|http_robertsanders.name_0|NoteTest|Database|API example|20000|0000000000000001.db sqlite> select * from Origins; http_robertsanders.name_0|5242880
回答
在http://www.phonegap.com上查看PhoneGap,他们声称它允许我们将JavaScript,HTML和CSS嵌入到本机iPhone应用程序中。
回答
我们可以在不知道任何obj-C的情况下创建应用程序。 QuickConnectiPhone框架允许我们执行此操作。请访问http://tetontech.wordpress.com,以了解如何使用它以及完成我们所要求的其他方式。
回答
我使用phonegap已有一段时间了,看来对我来说是最好的结果。我将在一周左右的时间内发布我的经验,同时还会链接到我的应用程序。
回答
看看关于这件事的新奥赖利书
回答
至少有2个人提到了phonegap,但我想我也应该发布此内容,并提及Apple已经批准了phonegap框架。因此,现在我们不会因为使用phonegap而被Apple拒绝应用程序。
有关phonegap和Apple的博客文章http://blogs.nitobi.com/jesse/2009/11/20/phonegapp-store-approval/
手机缺口首页
回答
Titanium Mobile也是一个选项,它允许我们编写JavaScript,并将其转换为Objective-C。