如何完全用JavaScript编写iPhone应用程序而又不只是将其变成Web应用程序?


84

我不想花时间学习Obj-C。我花了7年以上的时间进行Web应用程序编程。是否应该有一种方法来使用WebView并仅使用javascript编写整个应用程序,然后直接从项目资源中提取文件?

Answers:


71

我四处搜寻后找到了答案。这是我所做的:

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

  2. 将WebView对象拖到您的界面上并调整大小。

  3. 在WebViewController.m(或类似名称的文件,取决于视图的名称)内部,在viewDidLoad方法中:

    NSString * filePath = [[NSBundle mainBundle] pathForResource:@“ index” ofType:@“ html”];  
    NSData * htmlData = [NSData dataWithContentsOfFile:filePath];  
    如果(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和图像文件,都没有问题。到目前为止,我发现的唯一限制是我无法创建新文件夹,因此所有文件都使资源文件夹变得混乱。

  5. 技巧:确保已在XCode中将文件添加为资源,否则该文件将不可用。我一直在XCode中添加一个空文件,然后将我的文件拖到查找器的顶部。那一直在为我工作。

注意:我意识到Obj-C一定不难学习。但是,由于我已经在JS中安装了该应用程序,并且知道它可以在Safari中运行,因此对我来说这是一个更快的开发周期。有一天,我确定我必须分解并学习Obj-C。

我发现其他一些有用的资源:

从JavaScript调用Obj-C:从JavaScript调用Objective-C

从Obj-C调用JavaScript:针对网络黑客的iPhone应用开发

从应用程序捆绑读取文件:uiwebview


有趣的是,我本周末只是在查看GitX(标准MacOS应用)的代码,我认为这也是他们的工作。 wiki.github.com/pieter/gitx
2009年

1
对于混乱的问题,请尝试将目录添加到xcode项目中,然后选择“创建文件夹引用...”而不是“递归创建组...”。
节奏拳头09年

1
+1。而且我很确定您可以使用相同的技术来制作Android手机应用。并且,大概其他智能手机将发展其浏览器以支持Javascript,然后您也可以支持它们。跨平台的HTML / CSS / JavaScript是21世纪的方式。当然,特定于平台的粗糙本地代码早已过时了吗?
MarkJ


7

对于在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版本3.5.9输入“ .help”以获取说明

sqlite> .databaseseq名称文件


0个主要/pr​​ivate/var/mobile/Library/WebKit/Databases/Databases.db

sqlite> .tables

数据库起源

sqlite>从数据库中选择*;

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

sqlite>选择* from Origins;

http_robertsanders.name_0 | 5242880



2

您应该使用目标C编写本机包装。该包装可能只包含创建WebView并将其导航到Internet(应用程序所在的地址)中给定地址所必需的几行代码(如10)。但是在这种情况下,您的应用程序应该是功能齐全的Web应用程序(我的意思是,不仅使用JavaScript,而且还使用一些HTML进行标记)。


2

我遇到了同样的问题。我已经有一个完全用Java编写的游戏。我想制作一个iPhone友好版本,但是Obj-C太过分了。我最终要做的是使用WebView指向iphone应用程序的特殊URL。考虑一下之后,我想我可以将那些文件移到app目录中并在本地运行它们。


2

当前的Apple API无法做到这一点。最接近的选择是编写一个嵌入Webkit浏览器的简单本机iPhone应用程序。这样一来,您就可以在本地浏览xhtml / js应用程序。

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

附带说明,Obj-C非常容易学习。SDK中有大量示例。社区很强大,会毫不犹豫地回答大家提出的问题。


您可以通过用于JavaScript的WHATWG / HTML5 SQL存储API使用本地存储。请参阅我的答案以获取更多信息。
罗伯特·桑德斯,



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.