85

我不想花时间学习 Obj-C。我花了 7 年多的时间做 Web 应用程序编程。难道不应该有一种方法可以使用 WebView 并用 javascript 编写整个应用程序,直接从项目的资源中提取文件吗?

4

10 回答 10

72

我搜索了一圈后找到了答案。这是我所做的:

  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 = [捆绑包路径];
      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 一定不难学。但是由于我已经在 J​​S 中存在这个应用程序,并且我知道它可以在 Safari 中运行,这对我来说是一个更快的开发周期。总有一天我肯定会崩溃并学习 Obj-C。

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

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

从 Obj-C 调用 javascript:网络黑客的 iphone 应用程序开发

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

于 2008-09-15T17:07:33.133 回答
22

查看http://www.phonegap.com上的 PhoneGap,他们声称它允许您将 JavaScript、HTML 和 CSS 嵌入到原生 iPhone 应用程序中。

于 2008-10-22T22:47:56.390 回答
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> .databases seq 名称文件


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

sqlite> .tables

数据库起源

sqlite> 从数据库中选择 *;

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

sqlite> 从起源中选择 *;

http_robertsanders.name_0|5242880

于 2008-09-21T23:29:06.930 回答
4

您可以在不知道任何 obj-C 的情况下创建应用程序。QuickConnectiPhone 框架允许您执行此操作。查看http://tetontech.wordpress.com以了解如何使用它以及执行您所要求的其他方式。

于 2008-10-24T04:12:21.040 回答
2

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

于 2008-09-15T16:35:17.703 回答
2

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

于 2008-09-15T16:35:42.477 回答
2

目前的苹果 API 没有办法做到这一点。您最接近的选择是编写一个嵌入 webkit 浏览器的简单原生 iPhone 应用程序。这将让您在本地浏览您的 xhtml/js 应用程序。

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

作为旁注,Obj-C 相当容易学习。SDK 中有大量示例。社区很强大,会毫不犹豫地回答提出的问题。

于 2008-09-15T16:36:41.600 回答
1

我一直在使用phonegap,它似乎对我来说效果最好。我将在一周左右的时间内发布我的经验,并附上我的应用程序的链接。

于 2009-06-16T20:32:24.260 回答
1

Titanium Mobile也是一个选项 - 它允许您编写被翻译成 Objective-C 的 JavaScript。

于 2010-04-05T18:09:58.990 回答
0

至少还有 2 个人提到了 phonegap,但我想我也会发布这个并提到 Apple 已经批准了 phonegap 框架。因此,现在您不会因为您使用 phonegap 而被 Apple 拒绝您的应用程序。

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

电话差距首页

于 2009-12-04T20:52:20.010 回答