android调用js传递参数
1. 原生APP中js怎样与Android和ios进行交互
一、对于Android和ios我们要执行不同的操作,下面是判断系统的js代码
// alert(ismobile(1)); 1表示Android,0表示ios
function ismobile(test){
var u = navigator.userAgent, app = navigator.appVersion;
if(/AppleWebKit.*Mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/.test(navigator.userAgent))){
if(window.location.href.indexOf("?mobile")<0){
try{
if(/iPhone|mac|iPod|iPad/i.test(navigator.userAgent)){
return '0';
}else{
return '1';
}
}catch(e){}
}
}else if( u.indexOf('iPad') > -1){
return '0';
}else{
return '1';
}
}
二、js调用app端函数,下面是js代码
if(ismobile(1)==1){
Android.setTypeActivity(id,type,href);
}else{
jsToios(id,type,href);
}
setTypeActivity是Android端定义的函数,jsToios是ios端定义的函数,括号里是js端传递的参数。
三、至于js端怎样获取app端的数据,只需在js端提供给app端函数名字,在通知app端调用即可
四、还有一种方法可以不通过app的方法将数据传递给另一个页面,那就是通过URL的方式
在本页面将数据拼接在ip后面
在另外一个页面通过下面方法获取URL后的参数
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for(var i = 0; i < strs.length; i ++) {
theRequest[strs[i].split("=")[0]]=decodeURIComponent(strs[i].split("=")[1]);
}
}
return theRequest;
}
// 获取URL参数
var Request = new Object();
Request = GetRequest();
var name;
name = Request['name'];
2. 在android中怎样调用本地js文件里的方法并得到返回值
在android中调用本地js文件里的方法并得到返回值其方法如下:
Android中内置了WebKit模块,而该模块的java层视图类就是WebView,所有需要使用Web浏览器功能的Android都需要创建该视图类对象显示和处理请求的网络资源。目前WebKit支持Http、Https、Ftp和JavaScript请求。下面是在Android中调用JavaScript方法以及如何在js中调用本地方法。
1、在Assets下放一个简单的html文件jstest.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html40/strict.dtd">
<HTML>
<HEAD>
<meta name="viewport" content="width=device-width, target-densitydpi=device-dpi" />
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
function showMsg(){
alert("hello world!");
}
function showMsgInAndroid(){
myjs.showMsg('hello in android!');
}
</script>
</HEAD>
<BODY>
<span>测试js使用</span>
<button id='btntest' onclick='showMsgInAndroid()'>调用android方法</button>
</BODY>
</HTML>
3. 在Android上怎样实现JAVA和JS交互
在Android的开发过程中、遇到一个新需求、那就是让Java代码和Javascript代码进行交互、在IOS中实现起来很麻烦、而在Android中相对来说容易、Android对这种交互进行很好的封装、其实可以很简单的用Java代码调用WebView中的js函数、也可以用WebView中的js来调用Android应用中的Java代码
一、网页的JS代码调用ANDROID中JAVA代码的方法
在网页中调用java代码、需要在webview控件中添加javascriptInterface
contentWebView = (WebView) findViewById(R.id.webview);
//启用javascript
contentWebView.getSettings().setJavaScriptEnabled(true);
contentWebView.addJavascriptInterface(this, "js对象名");
在Activity中定义一个要被js调用的方法、src为js传递过来的参数、如果没有不传也可以的。
public void jsFunction(final String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
//在里对Android应用的UI进行处理
}
});
}
在网页中、只需要像调用js方法一样、进行调用就可以
<a onClick="window.js对象名.jsFunction(´hello world´)" >
点击调用java代码并传递参数
</a>
二、ANDROID中JAVA代码调用网页的JS代码的方法
Java代码调用js并传参其实是通过WebView的loadUrl方法去调用的、只是参数url的写法不一样
// 无参数调用
contentWebView.loadUrl("javascript:javacalljs()");
// 传递参数调用
contentWebView.loadUrl("javascript:javacalljswithargs("
+ "´hello world´" + ")");
三、JAVA和JS交互注意事项
1、Java 调用 js 里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法
2、Java 调用 js 的函数、没有返回值、调用就控制不到
3、Js 调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间
4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验
4. android callhandler 怎么给js传数据
看你数据量有多大。只是种类多的话把要传的数据封装成一个类,添加到Message的obj里面就行;如果数据量占用空间大的话直接传递可能会影响处理速度,这时可以考虑传递文件
5. Android webView 注入js文件,及交互
0.js文件:
链接:https://pan..com/s/1MaWKxgkYgQTVQCgn8-dxLg
提取码:o6wy
3.添加js要调用的Android方法
4.添加(JsBridge:js中调用Android方法的对象名)
5.注入js
6.Android调用js方法传值给js
步骤3中发送了处理后的消息,在webactivity中接受消息并处理:
数据示例:(参数需要使用单引号包着)
else中对应的
callbackResult('sr1557665118336','{"data":"test"}')
if中对应的
javascript:callbackResult('sr1557665118336','{"data":"test"}')
7.补充:eventbus消息实体封装类
8.总结:
6. 在Android上怎样实现JAVA和JS交互
JS调用JAVA:通过addJavascriptInterface注册函数供JS调用,例如:
在Android代码中:
mWebView.addJavascriptInterface(new Object() {
@JavascriptInterface
public boolean isOnline() {
return 1;
}
@JavascriptInterface
public boolean test(String msg) {
return "hello "+ msg;
}
}, "AndroidMain");
在js代码中调用:
var online=window.AndroidMain.isOnline();
var test=window.AndroidMain.test("ttt");
JAVA调用JS:使用loadURL调用JS的函数:
mWebView.loadURL("Javascript:alert('提示。。')")