如何在JAVASCRIPT调用Android JAVA函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在JAVASCRIPT调用Android JAVA函数相关的知识,希望对你有一定的参考价值。
首先是网页:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>js和android相互调用</title>
<head>
<script type="text/javascript" language="javascript">
//调用java方法jsCallJava()
function showHtmlcallJava()
var str = window.android.jsCallJava();
document.getElementById("info1").value = str;
//调用java方法jsCallJavaWithParams(String var),带参数
function showHtmlcallJava2()
var str = window.android.jsCallJavaWithParams("Devin Chen");
document.getElementById("info2").value = str;
//提供给java调用的方法
function show()
document.getElementById("id_input").value = "Java调用Html中的方法";
//提供给java调用的方法,带参数
function showWithParam(param)
document.getElementById("id_input2").value = "Java调用Html中的方法: " + param;
</script>
</head>
<body>
<input id="info1" style="width: 90%" type="text" value="null" /><br>
<input type="button" value="Html调用Java方法" onclick="showHtmlcallJava()" /><br>
<input id="info2" style="width: 90%" type="text" value="null" /><br>
<input type="button" value="Html调用带参数的Java方法" onclick="showHtmlcallJava2()" /><br>
<input id="id_input" style="width: 90%" type="text" value="null" /><br>
<input type="button" value="Java调用Html方法" onclick="window.android.javaCallJavaScript()" /><br>
<input id="id_input2" style="width: 90%" type="text" value="null" /><br>
<input type="button" value="Java调用带参数的Html方法" onclick="window.android.javaCallJavaScriptWithParams()" />
</body>
</html>
Android部分的布局就一个WebView,MainActivity源代码:
* java方法和javascript方法的相互调用
*/
public class MainActivity extends AppCompatActivity
private static final String url = "http://192.168.0.100:8080/server";
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
private void initView()
mWebView = (WebView) findViewById(R.id.web_main);
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDefaultTextEncodingName("utf-8");
mWebView.loadUrl(url);
mWebView.setWebViewClient(new WebViewClient());
//这两句是必须的,"android"就是jsp中调用方法时window后面的对象
Object obj = getObject();
mWebView.addJavascriptInterface(obj, "android");
private Object getObject()
Object obj = new Object()
/**
* html中的JavaScript调用Java方法
* 注解是必须的
* @return
*/
@JavascriptInterface
public String jsCallJava()
return "JavaScript调用Java方法";
/**
* html中的JavaScript调用带参数的Java方法
* 注解是必须的
* @return
*/
@JavascriptInterface
public String jsCallJavaWithParams(String var)
return "JavaScript调用带参数的Java方法" + var;
/**
* java调用html中的方法,遗憾的是不知道有什么办法可以拿到返回值
*/
@JavascriptInterface
public void javaCallJavaScript()
runOnUiThread(new Runnable()
@Override
public void run()
mWebView.loadUrl("javascript:show()");
);
/**
* java调用html中的方法,并且传递参数,这个有大用
*/
@JavascriptInterface
public void javaCallJavaScriptWithParams()
runOnUiThread(new Runnable()
@Override
public void run()
mWebView.loadUrl("javascript:showWithParam('baoge')");
);
;
return obj;
参考技术A 一、网页的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写业务脚本、以提升加载速度、改善用户体验 参考技术B 一、网页的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写业务脚本、以提升加载速度、改善用户体验。 参考技术C 你好:
一、网页的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写业务脚本、以提升加载速度、改善用户体验本回答被提问者采纳 参考技术D js不能直接调用java的函数,你可以通过ajax的方式接收java函数的返回值来让js使用
JavaScript 函数调用
JavaScript 函数有 4 种调用方式。
每种方式的不同在于 this 的初始化。
调用 JavaScript 函数
在之前的章节中我们已经学会了如何创建函数。
函数中的代码在函数被调用后执行。
作为一个函数调用
以上函数不属于任何对象。但是在 JavaScript 中它始终是默认的全局对象。
在 HTML 中默认的全局对象是 HTML 页面本身,所以函数是属于 HTML 页面。
在浏览器中的页面对象是浏览器窗口(window 对象)。以上函数会自动变为 window 对象的函数。
myFunction() 和 window.myFunction() 是一样的:
全局对象
当函数没有被自身对象调用时 this的值就会变成全局对象。
在web浏览器中全局对象是浏览器窗口(window对象)。
该实例返回的this对象是window对象
function myFunction(){
return this;
}
myFunction(); //返回window对象
函数作为方法调用
在 JavaScript 中你可以将函数定义为对象的方法。
以下实例创建了一个对象 (myObject), 对象有两个属性 (firstName 和 lastName), 及一个方法 (fullName):
fullName 方法是一个函数。函数属于对象。 myObject 是函数的所有者。
this对象,拥有 JavaScript 代码。实例中 this 的值为 myObject 对象。
测试以下!修改 fullName 方法并返回 this 值:
使用构造函数调用函数
如果函数调用前使用了 new 关键字, 则是调用了构造函数。
这看起来就像创建了新的函数,但实际上 JavaScript 函数是重新创建的对象:
以上是关于如何在JAVASCRIPT调用Android JAVA函数的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript如何调用Native iOS/Android 方法