发布网友 发布时间:2022-04-22 06:31
共3个回答
热心网友 时间:2022-04-20 05:05
Android的webview是基于webkit内核的,webview中集成了js与java互调的接口函数,通过addJavas criptInterface方法,可以将Java的类注册进webkit,给网页上的js进行调用,而且还可以通过loadUrl方法是给webkit传递一个URL,供浏览器来进行解析,实现Java和js交互。要想运行网页上的js脚本,webview必须设置支持Javas cript。Java代码1mWebview.getSettings().setJavas criptEnabled(true);然后是设置webview要加载的网页:web的网页:webView.loadUrl("http://www.google.com");本地的网页:webView.loadUrl("file:///android_asset/XX.html"); //本地的存放在:assets文件夹中webview做完基本的初始化后我们还要要给它,加进一个回调的代理类Javas criptInterface,并给它一个调用的名称:ncpJava代码1mWebView.addJavas criptInterface(new Javas criptInterface(),"ncp");Javas criptInterface可以是一个普通的Java类,类实现的方法,均可被js回调:Java代码final class Javas criptInterface {public int callOnJs() {return 1000;}public void callOnJs2(String mode) {//TODO}}Java要调用js的方法,只需知道js的方法名称即可:Java代码1mWebView.loadUrl("javas cript:onSaveCallback()");js 这边就更简单:Js代码window.onload = function(){document.getElementById('btn_1').addEventListener('click', onBtnClick, false);var _int_value = window.ncp.callOnJs();alert("get int from java:" + _int_value );}function onBtnClick() {window.ncp.callOnJs2("click");}
热心网友 时间:2022-04-20 06:23
与android交互:
function onBtnClick() {
window.ncp.callOnJs("id");
}
与objective-c交互:
function onBtnClick(cmd,parameter1)
{
document.write(Date());
document.location="objc://"+callOnJs+":/"+id;
}
热心网友 时间:2022-04-20 07:57
<script>
function view(id){
//alert(id);
myjs.passIdToApp(id);
// passIdApp(id);
}
< /script>
*******************************************************我是分割线****************************************************************
NSString *htmlPath=[[NSBundle mainBundle] resourcePath];
htmlPath=[htmlPath stringByAppendingPathComponent:@"Test.html"];
NSURL *localURL=[[NSURL alloc]initFileURLWithPath:htmlPath];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:localURL];
[self.mywebview loadRequest:request];
JSContext *context = [self.mywebview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
context[@"myjs.passIdToApp"] = ^() {
NSLog(@"Begin Log");
NSArray *args = [JSContext currentArguments];
for (JSValue *jsVal in args) {
NSLog(@"%@", jsVal);
NSString *proctID= [NSString stringWithFormat:@"%@",jsVal];
[self.navigationController pushViewController:[[Details_VC alloc]initWithProctID:proctID] animated:YES];
}
// JSValue *this = [JSContext currentThis];
NSLog(@"-------End Log-------");
};
*******************************************************我还是分割线****************************************************************
如果只调用passIdApp(id);但是如果改成了myjs.passIdApp(id);就无法获取数据了