js调用Android、ios原生代码

来源:互联网 发布:mac自带放大镜快捷键 编辑:程序博客网 时间:2024/04/30 07:06

ios部分

ios部分参考:传送门

js调用ios部分
调用必须在对应的.h或.m文件import

#import <JavaScriptCore/JavaScriptCore.h>//根据url加载网页- (void)loadWebPageWithString:(NSString*)urlString{  NSURLRequest *request =[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];  [self setUserAgent];  [_webView loadRequest:request];  JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];  context[@"application"] = ^() {//该行中的application就是js的方法名    NSArray *args = [JSContext currentArguments];//这里的args类容是JSValue,不能直接使用     for (JSValue *jsVal in args) {              NSLog(@"%@", jsVal);  //遍历打印所有value,可以通过[jsVal tostring]的方法转成NSstring类型        }         //这里可以根据个人需求执行逻辑}

html部分、

<html>  <head>           </head>  <body>         <button id="hallo" onclick="iosbuttonClick()"> test-ios</button>      <button id="hallo" onclick="androidbuttonClick()"> test-Android</button>     <script>    function iosbuttonClick()  {      application("parameter1", "parameter2");  //这里的参数个数无限制,可以空参数,application需要对应oc代码}    function androidbuttonClick(){     client.call("parameter1", "parameter2");//这里的参数个数无限制,可以空参数,client需要跟Android代码对应,call是Android代码的共有方法的方法名字。 }    </script></body>  </html>  

Android部分

1、使用当前的activity/fragment实现OnJavascriptInterfaceListener(本文使用activity)
2、为webview添加一个JavascriptInterface

webview.addJavascriptInterface(new JsOperation(this), "client");//client需要跟js对应

内部类JsOperation代码片段
“`
class JsOperation {

    Activity mActivity;    public JsOperation(Activity activity) {        mActivity = activity;    }    @JavascriptInterface//别把这个注解漏掉    public void call(String s1,String s2){//方法名字需要跟js对应    //这里执行程序的业务逻辑处理    }

}

0 0