如何完全用 JavaScript 编写 iPhone 应用程序而不使其只是一个 Web 应用程序?
-
09-06-2019 - |
题
我不想花时间去学习Obj-C。我花了 7 年多的时间进行 Web 应用程序编程。难道不应该有一种方法来使用 WebView 并用 javascript 编写整个应用程序,直接从项目的资源中提取文件吗?
解决方案
我四处寻找后找到了答案。这是我所做的:
在 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 应用程序
从应用程序包中读取文件: 网页浏览器
其他提示
查看 PhoneGap,网址为 http://www.phonegap.com 他们声称它允许您将 JavaScript、HTML 和 CSS 嵌入本机 iPhone 应用程序中。
对于那些在 iPhone 2.1(可能是 2.0)上执行此操作的人,您不需要为本地数据存储创建任何特殊服务。MobileSafari 似乎支持 HTML5/WHATWG SQL 数据库 API。这与最新版本的桌面 Safari 和 Firefox 支持的 API 相同。
如果您使用 Dojo 或 ExtJS 等提供存储抽象的工具包,您的代码应该可以在几乎任何现代浏览器上运行,包括 MobileSafari。
要测试,请打开 http://robertsanders.name/dev/stackoverflow/html5.html 在你的 iPhone 上。
如果您打开该页面,然后查看越狱 iPhone 的文件系统,您应该会在 /private/var/mobile/Library/WebKit/Databases/ 中的某个位置看到一个数据库。那里甚至还有一个网络开放的数据库目录。
root#sqlite3/private/var/mobile/library/webkit/databases/databases.db sqlite版本3.5.9 Enter“ .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
您可以在不了解任何 obj-C 的情况下创建应用程序。QuickConnectiPhone 框架允许您执行此操作。查看 http://tetontech.wordpress.com 了解如何使用它以及执行您所要求的操作的其他方法。
您应该使用 Objective C 编写本机包装器。这个包装器可能包含创建 WebView 并将其导航到互联网中给定地址(您的应用程序所在的位置)所需的几行代码(例如 10 行)。但在这种情况下,您的应用程序应该是一个功能齐全的 Web 应用程序(我的意思是,不仅使用 JavaScript,还使用一些 HTML 进行标记)。
我遇到了同样的问题。我已经有一个完全用 Javascript 编写的游戏。我很想制作一个 iPhone 友好的版本,但 Obj-C 有点矫枉过正。我最终做的是使用 WebView 指向 iphone 应用程序的特殊 url。经过思考,我想我可以将这些文件移动到应用程序目录并在本地运行它们。
目前的苹果 API 无法做到这一点。最接近的选择是编写一个嵌入 webkit 浏览器的简单本机 iPhone 应用程序。这将允许您在本地浏览 xhtml/js 应用程序。
如果您想存储数据,则需要更进一步,包括一个轻量级 http 服务器,该服务器为您的应用程序提供服务并提供存储和检索数据的调用。对于您来说可能不是一个理想的解决方案,但可能比完整的 Obj-C 应用程序更少工作。
附带说明一下,Obj-C 相当容易学习。SDK 中有大量示例。社区很强大,会毫不犹豫地回答提出的问题。
看看新的 奥莱利书 就此事
我已经使用phonegap有一段时间了,它似乎对我来说效果最好。我将在一周左右的时间内发布我的经验,并附上我的应用程序的链接。
钛手机 也是一个选项 - 它允许您编写可转换为 Objective-C 的 JavaScript。
至少另外 2 个人提到了phonegap,但我想我也应该发布这个并提到苹果已经批准了phonegap 框架。因此,现在您的应用程序不会因为您使用了phonegap而被Apple拒绝。
关于phonegap 和Apple 的博客文章 - http://blogs.nitobi.com/jesse/2009/11/20/phonegapp-store-approval/