使用本机function扩充webapp – 使用Rails Web应用程序应用程序桥接PhoneGap的InAppBrowser

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

它的usefelness然而作为一个纯粹的网络应用程序非常有限,我希望包括一些本机移动function,如通知,图片上传(通过图库或相机),联系人提取,也许更多的后来。 我还计划为台式机部署类似的增强型客户端,两者使用相同的前端。

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

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

然而,进一步研究它的API,似乎没有任何工具可以在本机应用程序和Web应用程序之间进行基本通信,除了基本的负载相关事件对我来说是无用的,除非我大量地触发我的应用程序触发这些事件(这看起来很虚伪)。

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

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

  • 我可以创建一个DOM元素,将它的属性用作本机端和Web应用程序之间的介质 – 但似乎没有办法从容器外部访问DOM。
  • 我可以通过phoneGap从我的webapp中听取一些特定的端点,在inAppBrowser之外,并根据服务器响应触发本机function – 这绝对有效,但这意味着我必须为其他平台编写不同的监听代码,因此稍微打破了我的最小编码需求。

所以这是我的问题:

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

感谢您提供的任何见解!

  1. 我不确定它是否内置,但是,您可以很容易地在您使用InAppBrowser打开的页面中注入自己的自定义脚本,至少在Android上(目前还不确定其他平台。)function尚未记录,但在移动规范测试套件中有测试,它看起来很简单: 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注入: iab.executeScript({code:code},callback 。我想你可以这样做,将事件写入外部页面中隐藏DOM元素的队列中,并从inAppBrowser中将事件从此队列中拉出来处理虽然看起来有点笨拙。我尝试注入你可以从任何一个JavaScript页面访问的全局变量,但是没有太多的运气……虽然我可能会想到一些方法,但是如果我拿出任何东西我会成为一定要编辑这篇文章。

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

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

  4. 我认为你想要做的事情(拦截来自InAppBrowser中打开的外部页面的JavaScript事件)可能是一个非常有用的概念和想法。 我也看到其他人也要求这样做。 我认为,如果不可能(可能是,我会继续搞乱它),可能有计划在pipleine。 您可以针对此function针对Cordova创建function请求,并查看其收到的效果。

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