如何完全用 JavaScript 编写 iPhone 应用程序而不使其只是一个 Web 应用程序?

StackOverflow https://stackoverflow.com/questions/64420

  •  09-06-2019
  •  | 
  •  

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

有帮助吗?

解决方案

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

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

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

  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 以及图像文件,没有任何问题。到目前为止,我发现的唯一限制是我无法创建新文件夹,因此所有文件都会弄乱资源文件夹。

  5. 诡计:确保您已将该文件添加为 XCode 中的资源,否则该文件将不可用。我一直在 XCode 中添加一个空文件,然后将我的文件拖到查找器的顶部。这对我来说很有效。

笔记:我意识到 Obj-C 一定不难学。但由于我已经在 J​​S 中安装了这个应用程序,而且我知道它可以在 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 主要/pr​​ivate/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/

电话差距主页

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top