Android和JS可以通过WebView相互调用方法。
首先,在Android中,可以使用WebView的loadUrl()方法加载一个带有JS代码的html文件,如下所示:
webView.loadUrl("file:///android_asset/example.html");
而在JS中,则可以使用WebView的addJavascriptInterface()方法来将Java对象暴露给JS调用,如下所示:
webView.addJavascriptInterface(new MyJavaObject(), "myJavaObject");
其中,MyJavaObject是一个Java对象,它可以有任意多的方法,供JS调用。而“myJavaObject”则是JS代码中访问该Java对象的名称。
在JS代码中,则可以通过该Java对象的名称,来访问其中的Java方法。例如,如果MyJavaObject对象中有一个名为“hello”、无参、无返回值的Java方法,那么JS代码中可以这样来调用它:
myJavaObject.hello();
当然,如果该Java方法需要传入参数,则可以使用JS代码中的字符串或数值来传入:
myJavaObject.methodWithParam("hello");
myJavaObject.methodWithParam(12345);
在Java对象中,我们也可以使用@JavascriptInterface注解来标注Java方法,以确保该方法可以被JS调用,如下所示:
public class MyJavaObject {
@JavascriptInterface
public void hello() {
// do something
}
@JavascriptInterface
public void methodWithParam(String param) {
// do something with param
}
}
通过上述方法,就可以在Android和JS之间实现相互调用了。不过需要注意的是,在JS中调用Java方法时,必须在UI线程中调用,否则会抛出异常。因此,在JS代码中调用Java方法时,最好使用setTimeout()方法,将要执行的代码放到一个新的线程中执行。
阿里云提供了Android和JS之间相互调用的功能。以下是具体步骤:
- 在Android中创建一个WebView,并通过setJavaScriptEnabled(true)启用JS支持。
-
在JS中,使用window.android对象调用Android方法。例如:
window.android.showToast(“Hello, World!”);
-
在Android中,创建一个JavaScriptInterface类,将其注入到WebView中。例如:
webView.addJavascriptInterface(new JavaScriptInterface(), “android”);
-
在JavaScriptInterface类中,创建一个showToast方法并使用@JavascriptInterface注解进行标记:
public class JavaScriptInterface {
@JavascriptInterface public void showToast(String message) { Toast.makeText(context, message, Toast.LENGTH_SHORT); }
}
- 这样,在JS中调用window.android.showToast方法时,会触发JavaScriptInterface类中的showToast方法,弹出Toast提示。
注意事项:
- 在Android 4.2及以上版本中,需要添加@JavascriptInterface注解,否则调用会抛出异常。
- 在JS中调用Android方法时,需要在UI线程中进行,否则会抛出异常。
- 在WebView中使用JavaScriptInterface时,需要确保JS代码的安全性,避免XSS等攻击。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/117216.html