2

我使用 Rails 3 和 JQuery Mobile 编写了一个简单的聊天应用程序,您可以在这里查看原型:http: //budz.vdsites.com

然而,它的用途非常有限,作为一个纯粹的网络应用程序,我希望包括一些本机移动功能,例如通知、图片上传(通过图库或相机)、联系人获取以及之后可能会出现的更多功能。我还计划为桌面部署一个类似的增强客户端,两者使用相同的前端。

一个重要的要求是能够编写最少的代码来启用这些功能,因为我可以支持的不仅仅是一个平台集,然后维护每个代码库将变得乏味。

经过一番研究,我发现我最好的选择是基于 PhoneGap 的无铬原生应用程序,在手机端具有足够的功能来启用这些额外的功能。为此,InAppBrowser 小部件似乎完美地适应了这项工作。

但是,进一步研究它的 API,似乎几乎没有设施可以在本机应用程序和 Web 应用程序之间实现基本通信,除了基本的负载相关事件,除非我大规模破解我的应用程序以触发,否则这些事件对我来说是无用的这些事件(这样做看起来很假)。

最终,我希望能够在 PhoneGap 端监听自定义事件,并从 webapp 触发它们。

我想出了一些线索来实现所需的功能:

  • 我可以创建一个 DOM 元素来使用它的属性作为本机端和 Web 应用程序之间的媒介 - 但似乎没有办法从它的容器外部访问 DOM。
  • 我可以在 inAppBrowser 之外的 phoneGap 监听我的 webapp 中的一些特定端点,并根据服务器响应触发本机功能 - 这肯定有效,但这意味着我必须为其他平台编写不同的监听代码,从而稍微破坏我的最小编码要求。

所以这是我的问题:

  • 有没有办法使用 PhoneGap 实现我想要的行为(事件调度)?
  • 您如何看待我提出的两种方法?
  • 我应该寻找另一个平台吗?你有什么建议?
  • 社区对此有何看法?您如何处理此类案件?

感谢您提供的任何见解!

4

2 回答 2

4
  1. 我不确定这是否是内置的,但是,您可以很容易地在使用 InAppBrowser 打开的页面中注入自己的自定义脚本,至少在 Android 上是这样(目前不确定其他平台。)这个功能尚未记录,但在 mobile-spec 测试套件中有针对它的测试,看起来很简单: https ://github.com/apache/cordova-mobile-spec/blob/master/inappbrowser/index .html#L165 他们只是在打电话inAppBrowser.injectScript()。如果您查看该页面,您会发现他们通过注入以下代码很容易地操纵外部网页的 DOM:

                 var code = '(function(){\n' +
                  ' var header = document.getElementById("header");\n' +
                  ' header.innerHTML = "Script literal successfully injected";\n' +
                  ' return "abc";\n' +
                  '})()';
    

    并将其注入:iab.executeScript({code:code},callback. 我想您可以这样做以将事件写入外部页面中隐藏的 DOM 元素中的队列中,并从您的 inAppBrowser 中拉出此队列中的事件以处理它们。不过,这似乎有点笨拙。我尝试注入可以从任一 JavaScript 页面访问的全局变量,但运气不佳……不过,可能有一些方法可以做到这一点,如果我想出任何东西,我一定会编辑这篇文章。

  2. 第一种方法几乎就是我上面建议的。我会使用隐藏在外部页面中,并将事件/命令写入其中,然后您可以在 Cordova 代码中读取和解释。对于第二种方法,我不明白您的建议或为什么您必须为不同的平台编写不同的代码。

  3. 对不起,我真的没有任何其他建议。我认为 Cordova/PhoneGap 是您的最佳选择,因为在所有平台上使用相同的一组 Cordova API 可以很容易地在多个平台上创建具有相同本机功能的应用程序。

  4. 我认为您正在尝试做的事情(从 InAppBrowser 中打开的外部页面拦截 JavaScript 事件)可能是一个非常有用的概念和想法。我也看到其他人要求这个。我认为,如果不可能(可能是,我会一直搞砸它),那么管道中可能会有计划。您可以针对 Cordova 针对此功能创建一个功能请求,并查看它的接收情况。

于 2013-05-01T15:17:48.253 回答
-1

混合 Web 应用程序还有另一种以服务器为中心的方法,称为 BridgeIt:http ://bridgeit.mobi 。您可以非常轻松地为 Android、iOS 或 Windows Phone 8 上的任何 Web 应用程序添加本机支持。这是一个简单的 javascript api,允许您访问各种原生移动功能,如相机、摄像机、联系人等。它有一个很棒的 web/native 通知平台。

于 2014-03-21T17:50:11.680 回答