Android中WebView使用html,且实现android和JS的互相调用
2018-02-28 10:30
936 查看
本文原创,转载注明出处JUSTYiSheng
web.html文件如下
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
function javaToJS(){
document.getElementById("content").innerHTML =
"<br\>JAVA调用了JS的无参函数";
}
function javaToJsWith(arg){
<!--document.getElementById("content").innerHTML =-->
<!--("<br\>"+arg);-->
document.location=arg;
}
</script>
</head>
<body>
以下为html内容<br/>
<h1><div id="content">显示一条文本</div></h1>
<br/>
<input type="button" value="调用java代码,且无参" onclick="window.java.noParameterFunction()" /> <br/> <input type="button" value="调用java代码,且有参" onclick="window.java.parameterFunction('JS->android 有参成功')"/>
</body>
</html>分析:内容很简单,两个JS方法,供原生调用。两个按钮,调用原生的方法。分别对应有参调用、无参调用,看代码即可理解
2、创建安卓工程
创建一个最简单的安卓工程,一个活动,布局中有两个按钮和webview即可
MainActivity.javapackage com.example.zyy.androidtohtml;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
/**
* Created by zyy on 2018/2/27.
*/
public class MainActivity extends Activity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webview);
// 启用javascript
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient());
// 从assets目录下面的加载html
webView.loadUrl("file:///android_asset/web.html");
webView.addJavascriptInterface(MainActivity.this, "java");//name:android在网页里面可以用window.name.方法名调用java方法
//Button1按钮 无参调用HTML js方法
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 无参数调用 JS的方法
webView.loadUrl("javascript:javaToJS()");
}
});
//Button2按钮 有参调用HTML js方法
findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 传递参数调用JS的方法,点击后调用document.location=arg切换网页
webView.loadUrl("javascript:javaToJsWith(" + "'https://baike.so.com/doc/456230-483111.html'" + ")");
}
});
}
//由于安全原因 targetSdkVersion>=17需要加 @JavascriptInterface
//JS调用java,且无参
@JavascriptInterface
public void noParameterFunction() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Button button = (Button) findViewById(R.id.button2);
button.setText("JS->android 无参成功");
}
});
}
//JS调用java,且传参
@JavascriptInterface
public void parameterFunction(final String parameter) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Button button = (Button) findViewById(R.id.button2);
button.setText(parameter);
}
});
}
}
对应的activity_main.xml布局文件<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="JUSTYiSheng的博客,转载注明出处\nAndroid"
/>
<Button
android:id="@+id/button"
android:layout_margin="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="调用JS"
android:background="@color/colorPrimaryDark"
android:textColor="#ffffff"
/>
<Button
android:id="@+id/button2"
android:layout_margin="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="调用有参JS"
android:background="@color/colorPrimaryDark"
android:textColor="#ffffff"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Html+JS"
android:layout_marginTop="8dp"
/>
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>3、将web.html放进assets文件下
![](https://img-blog.csdn.net/20180228101645272?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSlVTVFlpU2hlbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
4、demo运行情况
基本界面:
![](https://img-blog.csdn.net/20180228101803907?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSlVTVFlpU2hlbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
点击 调用JS后:
![](https://img-blog.csdn.net/20180228101922856?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSlVTVFlpU2hlbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
点击 调用有参JS后:
![](https://img-blog.csdn.net/20180228102031152?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSlVTVFlpU2hlbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
点击网页的两个按钮图就不贴了,效果是点击网页按钮后,原生按钮text会改变
5、注意事项
android中webView.addJavascriptInterface(MainActivity.this, "java"); 网页中
附demo下载地址:点击打开链接
如果对开发有些基础的,看文章完全足够,不用浪费积分下载,哈哈
转载请注明出处,如有疑问可以留言
1、创建html文件
创建文件很简单,用基本的文本编辑器保存成.html格式即可web.html文件如下
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
function javaToJS(){
document.getElementById("content").innerHTML =
"<br\>JAVA调用了JS的无参函数";
}
function javaToJsWith(arg){
<!--document.getElementById("content").innerHTML =-->
<!--("<br\>"+arg);-->
document.location=arg;
}
</script>
</head>
<body>
以下为html内容<br/>
<h1><div id="content">显示一条文本</div></h1>
<br/>
<input type="button" value="调用java代码,且无参" onclick="window.java.noParameterFunction()" /> <br/> <input type="button" value="调用java代码,且有参" onclick="window.java.parameterFunction('JS->android 有参成功')"/>
</body>
</html>分析:内容很简单,两个JS方法,供原生调用。两个按钮,调用原生的方法。分别对应有参调用、无参调用,看代码即可理解
2、创建安卓工程
创建一个最简单的安卓工程,一个活动,布局中有两个按钮和webview即可
MainActivity.javapackage com.example.zyy.androidtohtml;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
/**
* Created by zyy on 2018/2/27.
*/
public class MainActivity extends Activity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webview);
// 启用javascript
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient());
// 从assets目录下面的加载html
webView.loadUrl("file:///android_asset/web.html");
webView.addJavascriptInterface(MainActivity.this, "java");//name:android在网页里面可以用window.name.方法名调用java方法
//Button1按钮 无参调用HTML js方法
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 无参数调用 JS的方法
webView.loadUrl("javascript:javaToJS()");
}
});
//Button2按钮 有参调用HTML js方法
findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 传递参数调用JS的方法,点击后调用document.location=arg切换网页
webView.loadUrl("javascript:javaToJsWith(" + "'https://baike.so.com/doc/456230-483111.html'" + ")");
}
});
}
//由于安全原因 targetSdkVersion>=17需要加 @JavascriptInterface
//JS调用java,且无参
@JavascriptInterface
public void noParameterFunction() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Button button = (Button) findViewById(R.id.button2);
button.setText("JS->android 无参成功");
}
});
}
//JS调用java,且传参
@JavascriptInterface
public void parameterFunction(final String parameter) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Button button = (Button) findViewById(R.id.button2);
button.setText(parameter);
}
});
}
}
对应的activity_main.xml布局文件<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="JUSTYiSheng的博客,转载注明出处\nAndroid"
/>
<Button
android:id="@+id/button"
android:layout_margin="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="调用JS"
android:background="@color/colorPrimaryDark"
android:textColor="#ffffff"
/>
<Button
android:id="@+id/button2"
android:layout_margin="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="调用有参JS"
android:background="@color/colorPrimaryDark"
android:textColor="#ffffff"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Html+JS"
android:layout_marginTop="8dp"
/>
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>3、将web.html放进assets文件下
4、demo运行情况
基本界面:
点击 调用JS后:
点击 调用有参JS后:
点击网页的两个按钮图就不贴了,效果是点击网页按钮后,原生按钮text会改变
5、注意事项
android中webView.addJavascriptInterface(MainActivity.this, "java"); 网页中
<input type="button" value="调用java代码,且无参" onclick="window.java.noParameterFunction()" /> <br/> <input type="button" value="调用java代码,且有参" onclick="window.java.parameterFunction('JS->android 有参成功')"/>android中“java”对应JS中的window.java调用原生方法,这两个地方一定要相同,不然调用失败
附demo下载地址:点击打开链接
如果对开发有些基础的,看文章完全足够,不用浪费积分下载,哈哈
转载请注明出处,如有疑问可以留言
相关文章推荐
- android webview javascriptinterface实现从HTML JS调用ANDROID内部程序
- Android实现js及webview交互之在html页面中调用系统摄像头
- Android webview和js互相调用实现方法
- Android端使用WebView注入一段js代码实现js调用android
- Android实现js及webview交互之在html页面中调用系统摄像头
- Android实现js及webview交互之在html页面中调用系统摄像头
- Android中WebView使用3,html掉android中的方法webView调用js中的方法
- Android使用webview控件加载本地html,通过Js与后台Java实现数据的传递
- android WebView 和js互调用的使用说明。
- android Webview 实现js调用java代码实现Activity跳转
- WebView使用总结(应用函数与JS函数互相调用)
- android webview 调用js实现图像选择并上传
- 分享:WebView使用总结(应用函数与JS函数互相调用)
- Android WebView 实现JS相互调用 JsBridge
- 在webView 中使用JS 调用 Android / IOS的函数 Function
- Android基于WebView的Java和JS相互调用实现步骤,附带精简可行的DEMO
- iOS webView加载本地html 调用 js,css (基本使用)
- android webview中js与java互相调用
- iOS 加载HTML的相关问题(与JS的互相调用和WKWebView加载本地网页)
- WebView使用总结(应用函数与JS函数互相调用)