您的位置:首页 > 移动开发 > IOS开发

js调用Android、ios原生代码

2016-01-08 16:34 886 查看
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对应
//这里执行程序的业务逻辑处理
}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android ios