我怎样才能完全用JavaScript写一个iPhone应用程序,而不只是一个Web应用程序?

我不想花时间学习Obj-C。 我已经花了7年多时间做Web应用程序编程。 不应该有一种方法来使用WebView,只是写在JavaScript中的整个应用程序,从项目的资源拉的文件?

经过四处寻找,我find了答案。 这是我所做的:

  1. 在XCode中创build一个新项目。 我想我使用了基于视图的应用程序。

  2. 将WebView对象拖动到您的界面上并resize。

  3. 在你的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]]];
     } 
  4. 现在,您已添加为项目资源的任何文件都可以在您的Web应用程序中使用。 我有一个index.html文件包括JavaScript和CSS和图像文件没有问题。 到目前为止我发现的唯一限制是我无法创build新的文件夹,因此所有文件都将资源文件夹弄乱了。

  5. 招:确保你已经添加了文件作为资源在XCode或文件将不可用。 我一直在XCode中添加一个空文件,然后在查找器中将我的文件拖到最上面。 这一直在为我工作。

注意:我意识到Obj-C一定不那么难学。 但是因为我已经有了这个应用程序存在于JS,我知道它在Safari的作品,这是一个更快的开发周期对我来说。 有一天,我确信我将不得不分手并学习Obj-C。

我发现一些其他资源有帮助:

从javascript调用Obj-C:从javascript 调用objective-c

从Obj-C调用JavaScript: iPhone黑客应用开发

从应用程序包读取文件: uiwebview

对于那些在iPhone 2.1(也许是2.0)上这样做,你不需要为本地数据存储创build任何特殊的服务。 MobileSafari似乎支持HTML5 / WHATWG SQL数据库API。 这是最近版本的桌面Safari和Firefox所支持的相同的API。

如果您使用的是像Dojo或ExtJS这样的提供存储抽象的工具包,那么您的代码应该可以用于任何现代浏览器,包括MobileSafari。

要testing,请打开iPhone上的http://robertsanders.name/dev/stackoverflow/html5.html

如果你打开那个页面然后看一下Jailbroken iPhone的文件系统,你应该在/ private / var / mobile / Library / WebKit / Databases /中的某处看到一个数据库。 甚至还有一个网页打开的数据库的目录。

root#sqlite3 /private/var/mobile/Library/WebKit/Databases/Databases.db SQLite版本3.5.9input“.help”查看说明

sqlite> .databases seq名称文件


0 main /private/var/mobile/Library/WebKit/Databases/Databases.db

sqlite> .tables

数据库的起源

sqlite> select * from数据库;

1 | http_robertsanders.name_0 | NoteTest |数据库| API示例| 20000 | 0000000000000001.db

sqlite>select*起源;

http_robertsanders.name_0 | 5242880

你可以在不知道obj-​​C的情况下创build一个应用程序。 QuickConnectPhone框架允许您执行此操作。 看看http://tetontech.wordpress.com如何使用它以及其他方式做你的要求。;

你应该有用Objective C编写的本地包装器。这个包装器可以包含创buildWebView所需的几行代码(如10),并将其导航到Internet中的给定地址(应用程序驻留的地方)。 但在这种情况下,您的应用程序应该是一个function齐全的Web应用程序(我的意思是,不仅使用JavaScript,还使用一些HTML标记)。

我遇到了同样的问题。 我已经有一个完全用Javascript写的游戏。 我很想做一个iPhone友好的版本,但Obj-C是一个矫枉过正的。 我最终做的是使用WebView指向iPhone应用程序的特殊URL。 想过之后,我想我可以将这些文件移动到应用程序目录并在本地运行。

没有办法与当前的苹果API做到这一点。 您最接近的select是编写一个embedded了webkit浏览器的简单的本地iPhone应用程序。 这将让你浏览本地的xhtml / js应用程序。

如果你想存储数据,你需要更进一步,包括一个轻量级的http服务器,服务器上的应用程序,并提供调用来存储和检索数据。 可能不是一个理想的解决scheme,但可能比完整的Obj-C应用程序更less的工作。

作为一个侧面说明,Obj-C相当容易学习。 SDK中有很多例子。 社区是强大的,将毫不犹豫地回答良好的问题。

看看关于这个问题的新奥列利书

我一直在使用phonegap一段时间,它似乎有我最好的结果。 我会在一个星期左右发布我的经验,以及一个链接到我的应用程序以及。

Titanium Mobile也是一个选项 – 它可以让你编写翻译成Objective-C的JavaScript。

至less有两个人提到phonegap,但我想我也会发布这个,并提到苹果已经批准了phonegap框架。 所以,现在你不会因为你使用手机电话而被苹果拒绝了。

关于phonegap和苹果的博客文章 – http://blogs.nitobi.com/jesse/2009/11/20/phonegapp-store-approval/

电话差距首页