Dan*_*son 5 android uiwebview webview ios cordova
此应用程序已存在于Apple App Store和Android市场中.它是一个使用大量本机代码的应用程序,并不是完全html5ed的候选人.
Longwinded描述
我想要一个基于Web的系列设置页面.其中一些页面将在移动设备上本地存在,一些将托管在远程服务器上.本机应用程序需要与本地网页进行通信,以使用javascript在网页中获取和设置信息.
例如,WebView/UIWebview中显示的第一个页面将是本地索引页面.如果远程网站关闭,索引页面上与远程页面的链接将显示为灰色.在加载WebView时,本机应用程序将需要检测该页面的可访问性并将javascript发送到页面以使按钮变灰.同样,需要将本地网页中的某些设置更改发送回Native应用程序进行处理.
短期和甜蜜要求摘要
潜在的解决方案途径
A. PhoneGap
我意识到如果我的应用程序完全是一个Web应用程序,Phonegap可以很好地工作.从我的阅读来看,似乎Phonegap并不喜欢嵌入本地应用程序进行兼职工作.
什么?你说这很容易,而且我被误导了?启发我哦明智的一个.
B. 自己动手
我愿意推出自己的解决方案,但是从Webview到Native Apps获取和设置信息的方法似乎完全不同.更多的是获取而不是设置(iOS的伪造URL,非常好的Android的AddJavaScriptInterface).而且,这条道路似乎可能在未来导致严重的维护问题.
说什么?你的天才程序员朋友已经创建了一个网站,以令人难以忍受的细节描述这个过程?告诉我更多.
C. 第三方图书馆
完美的第三方库可以满足我的需求(甚至更多!)吗?救我脱离我的无知.
决策
在未来,似乎PhoneGap的'Cleaver'项目将是实现这一目标的最佳方式.
由于它还没有为Android做好准备,似乎当前(12月初的)一次性嵌入式HTML的最佳解决方案是使用假URL方案从网页到本机应用程序进行通信(两个平台都可以从本机应用程序到网页时直接在页面上执行JS).
Rus*_*uss 10
对于Android,这更容易做到.看看WebView
的addJavascriptInterface
方法.您可以使用可在HTML javascript中直接调用的方法创建自己的对象.
iOS需要一点棘手.针对这些类型问题的最佳解决方案是:
native://somehost.com/somepath
当您的javascript想要通知iOS代码使用时window.location = 'native://somehost.com/somepath';
将UIWebView
委托设置为定义webView的对象:shouldStartLoadWithRequest:navigationType:它看起来像这样
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
Run Code Online (Sandbox Code Playgroud)要让您的iOS代码在您的JavaScript中发送信息或调用函数,您可以使用WebView stringByEvaluatingJavaScriptFromString:
.这将返回javascript表达式的结果,因此您也可以使用它从页面本身获取一些信息.要调用函数,请使用类似的东西
[webview stringByEvaluationgJavaScriptFromString:@"myJavaScriptFunction();"]
Run Code Online (Sandbox Code Playgroud)你也可以通过创建一个自定义WebViewClient
和覆盖shouldOverrideUrlLoading
方法来处理Android中的组合方案,类似于上面的iOS代码,除了返回调用是向后的,true
如果你处理了URL就返回,并且你WebView
应该什么也不做,false
如果你想要的话WebView
处理装载.确保创建和自定义分配WebViewClient
到WebView
使用setWebViewClient
.要在实际上调用javascript函数WebView
做类似的事情webview.loadUrl("javascript:myJavaScriptFunction();");
归档时间: |
|
查看次数: |
4090 次 |
最近记录: |