与现有iOS和Android应用程序中的嵌入式(UI)网络视图通信

与现有iOS和Android应用程序中的嵌入式(UI)网络视图通信,android,ios,cordova,uiwebview,webview,Android,Ios,Cordova,Uiwebview,Webview,该应用程序已经存在于苹果应用商店和Android市场。它是一款使用大量本机代码的应用程序,不适合完全采用HTML5 冗长的描述 我想有一个基于网络的设置页面系列。其中一些页面将在移动设备上本地运行,一些页面将托管在远程服务器上。本机应用程序需要与本地网页通信,以使用javascript获取和设置网页中的信息 例如,WebView/UIWebview中显示的第一个页面将是本地索引页面。如果远程网站关闭,索引页上指向远程页面的链接将变灰。加载WebView时,本机应用程序需要检测该页面的可访问性,并

该应用程序已经存在于苹果应用商店和Android市场。它是一款使用大量本机代码的应用程序,不适合完全采用HTML5

冗长的描述

我想有一个基于网络的设置页面系列。其中一些页面将在移动设备上本地运行,一些页面将托管在远程服务器上。本机应用程序需要与本地网页通信,以使用javascript获取和设置网页中的信息

例如,WebView/UIWebview中显示的第一个页面将是本地索引页面。如果远程网站关闭,索引页上指向远程页面的链接将变灰。加载WebView时,本机应用程序需要检测该页面的可访问性,并向该页面发送javascript以灰显按钮。同样,在本地网页中所做的某些设置更改需要发送回本机应用程序进行处理

短而甜的要求摘要

  • 在webview中嵌入远程和本地网页
  • 这些网页对于Android和iOS都是相同的
  • 本地页面使用JavaScript从本机移动应用程序获取数据并将数据发送到本机移动应用程序
潜在的解决方案途径

A.电话差距

我意识到,如果我的应用程序完全是一个web应用程序,Phonegap将很好地解决这个问题。从我的阅读来看,Phonegap似乎并不真的喜欢在本地应用程序中嵌入兼职工作

什么?你说这真的很容易,而我却被误导了?开导我吧,智慧的人

我自己滚

我愿意推出自己的解决方案,但是通过Javascript从WebView到本机应用程序获取和设置信息的方法似乎完全不同。更重要的是获取,而不是设置(iOS的伪URL,Android的非常好的AddJavaScriptInterface)。此外,这条道路似乎可能会导致未来严重的维护难题

说什么?你的天才程序员朋友制作了一个网站,详细描述了这个过程?告诉我更多

C.第三方图书馆

完美的第三方库可以做我想要的一切(还有更多!)存在吗?把我从无知中解救出来


决策

在未来,PhoneGap的“劈刀”项目似乎将是实现这一目标的最佳方式


由于Android尚未准备好,目前(2012年6月初)针对一次性写入嵌入式HTML的最佳解决方案似乎是使用假URL方案从网页到本机应用程序进行通信(从本机应用程序到网页时,两种平台都可以在页面上直接执行JS)。

对于Android来说,这更简单。看看
WebView
的方法。您可以使用可以在HTML javascript中直接调用的方法创建自己的对象

iOS需要一些技巧。解决这类问题的最佳方法是:

  • 对于iOS的回调,您基本上需要构建自己的URL方案,如
    native://somehost.com/somepath
    当您的javascript想要通知iOS代码时,请使用
    window.location=native://somehost.com/somepath';
  • UIWebView
    委托设置为定义它的对象,该对象将如下所示

    if ([request.URL.scheme isEqualToString:@"native"]){
        if([request.URL.host isEqualToString:@"somehost.com"]) {
            //Do the code you need to do here, branch off depending
            //on the path and/or host, you can parse parameters here too
            return NO; //This will keep UIWebView from trying to actually load 
                       //your made up scheme
        }
    }
    return YES; //If the request isn't one you want to intercept return YES/true
                //so UIWebView will load the page
    
  • 要让iOS代码在javascript中发送信息或调用函数,可以使用WebView的。这将返回javascript表达式的结果,因此您也可以使用它从页面本身获取一些信息。要调用函数,请使用以下内容

    [webview stringByEvaluationgJavaScriptFromString:@"myJavaScriptFunction();"]
    

您还可以在Android中通过创建一个自定义并覆盖
shouldOverrideUrlLoading
方法来处理虚构的方案,与上面的iOS代码类似,除了返回调用是向后的,如果您处理URL,则返回
true
,而
WebView
不应再做任何事情,如果希望
WebView
处理加载,则输入
false
。确保使用创建自定义
WebView客户端并将其分配给
WebView
。要在实际的
WebView
上调用javascript函数,请执行类似
WebView.loadUrl(“javascript:myJavaScriptFunction();”)的操作

PhoneGap iOS有一个称为Cleaver的概念,您可以将web视图嵌入到本机iOS应用程序中。兰迪·麦克米利安就是一个很好的例子。在Android方面,我们正在努力实现同样的功能。因此,我们还没有到达那里,但我们会到达那里。

刚才请阅读您问题的B点。是的,这很痛苦,但这是唯一的办法。老实说,我很失望苹果给UIWebView提供的界面太少了。我目前正在为一个项目做类似的事情,该项目需要为Android和iOS本地加载特殊的网页,这就是我采取的路线。如果你找到一个第三方库来完成所有这些,我很乐意看到它。对于扩展WebViewClient以处理Android中相同伪造URL的建议+1。我对Android不太熟悉,也不知道这是一种选择。如果没有第三方库的建议,这可能是我尝试的第一条道路。谢谢你的意见!西蒙,这看起来很有趣。如果Android可以使用,这肯定是我们尝试的第一件事。它就要来了。五月底的日子不好过,但六月底的日子看起来真的很好。GAJavaScript呢。这使您可以像Android的AddJavaScriptInterface一样进行调解。