【问题标题】:How can I write an iPhone app entirely in JavaScript without making it just a web app?我怎样才能完全用 JavaScript 编写一个 iPhone 应用程序而不使它只是一个 Web 应用程序?
【发布时间】:2010-09-09 00:42:30
【问题描述】:

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

【问题讨论】:

    标签: javascript ios objective-c


    【解决方案1】:

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

    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:calling objective-c from javascript

    从 Obj-C 调用 javascript:iphone app development for web hackers

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

    【讨论】:

    • 有趣的是,这个周末我只是在查看 GitX(标准 MacOS 应用程序)的代码,我认为这也是他们所做的。 wiki.github.com/pieter/gitx
    • 对于杂乱的问题,请尝试将目录添加到您的 xcode 项目并选择“创建文件夹引用...”而不是“递归创建组...”。
    • +1。而且我很确定您可以使用相同的技术来制作 Android 手机应用程序。而且,据推测,其他智能手机将发展他们的浏览器以支持 Javascript,然后你也可以支持它们。跨平台的 HTML/CSS/JavaScript 是 21 世纪的方式。平台特定的原生代码肯定早就过时了吗?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      对于那些在 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 序列名称文件


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

      sqlite> .tables

      数据库起源

      sqlite> 从数据库中选择 *;

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

      sqlite> select * from Origins;

      http_robertsanders.name_0|5242880

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

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

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

              顺便说一句,Obj-C 相当容易学习。 SDK 中有大量示例。社区很强大,会毫不犹豫地回答提出的问题。

              【讨论】:

              • 您可以通过 WHATWG/HTML5 SQL storage API for JavaScript 使用本地存储。有关更多信息,请参阅我的答案。
              【解决方案8】:

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

              【讨论】:

              【解决方案9】:

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

              【讨论】:

              • 真的翻译成Objective-C了吗?我认为它是在像 PhoneGap 这样的网络浏览器组件中运行的。
              【解决方案10】:

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

              Blog post about phonegap and Apple - http://blogs.nitobi.com/jesse/2009/11/20/phonegapp-store-approval/

              Phone Gap Home

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-11-07
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-08-29
                相关资源
                最近更新 更多