此应用程序已存在于Apple App Store和Android市场中。它是一个使用大量本机代码的应用程序,并不是完全html5ed的候选者。
Longwinded Description
我想要一个基于Web的系列设置页面。其中一些页面将在移动设备上本地存在,一些将托管在远程服务器上。本机应用程序需要与本地网页通信,以使用javascript在网页中获取和设置信息。
例如,WebView / UIWebview中显示的第一个页面将是本地索引页面。如果远程网站关闭,索引页面上与远程页面的链接将显示为灰色。在加载WebView时,本机应用程序将需要检测该页面的可访问性并将javascript发送到页面以使按钮变灰。同样,需要将本地网页中的某些设置更改发送回Native应用程序进行处理。
简短而甜蜜的要求摘要
潜在的解决方案途径
一个。 的PhoneGap
我意识到如果我的应用程序完全是一个Web应用程序,Phonegap会很好用。从我的阅读来看,似乎Phonegap并不喜欢嵌入本地应用程序进行兼职工作。
什么?你说这很容易,而且我被误导了?启发我哦明智的一个。
B中。 自己动手
我愿意推出自己的解决方案,但是通过Javascript从Webview获取和设置信息到Native Apps的方法似乎完全不同。更多的是获取而不是设置(iOS的伪造URL,非常好的Android的AddJavaScriptInterface)。而且,这条道路似乎可能在未来导致严重的维护问题。
说什么?你的天才程序员朋友已经创建了一个网站,以令人难以忍受的细节描述这个过程?告诉我更多。
℃。 第三方图书馆
完美的第三方图书馆能够完成我想要的一切(以及更多!)吗?救我脱离我的无知。
决策
将来,似乎PhoneGap的'Cleaver'项目将是实现这一目标的最佳方式。
由于尚未为Android做好准备,似乎当前(12月初的)一次性嵌入式HTML的最佳解决方案是使用虚假URL方案从网页到本机应用程序进行通信(当从本机应用程序到网页时,两个平台都可以直接在页面上执行JS。)
答案 0 :(得分:10)
对于Android,这样做更简单。看看WebView
的{{3}}方法。您可以使用可以在HTML javascript中直接调用的方法创建自己的对象。
iOS需要一点棘手。针对这些类型问题的最佳解决方案有两个方面:
native://somehost.com/somepath
当您的javascript想要通知iOS代码时使用window.location = 'native://somehost.com/somepath';
将UIWebView
委托设置为定义addJavascriptInterface
的对象,它看起来像这样
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的webView:shouldStartLoadWithRequest:navigationType:。这将返回javascript表达式的结果,因此您也可以使用它从页面本身获取一些信息。要调用函数,请使用类似
的内容[webview stringByEvaluationgJavaScriptFromString:@"myJavaScriptFunction();"]
您还可以通过创建自定义stringByEvaluatingJavaScriptFromString:
并覆盖shouldOverrideUrlLoading
方法来处理Android中的组合方案,类似于上面的iOS代码,但返回调用是向后的,您返回{{1}如果您处理了网址,true
应该不再执行任何操作,WebView
如果您希望false
处理加载。请务必使用WebViewClient
创建自定义WebView
并将其分配给WebViewClient
。要在实际WebView
上调用javascript函数,请执行WebView
答案 1 :(得分:0)
PhoneGap iOS有一个名为Cleaver的概念,您可以将Web视图嵌入到原生iOS应用程序中。 Randy McMillian有一个很好的例子here。在Android方面,正在努力实现相同的功能。所以我们还没有,但我们会到达那里。