android webView js方法和java 方法交互

(原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。)
原文连接:

目标: 在android activity webView的使用,activity中执行html中的js 方法, 和在html 中 调用activity 中的java方法

如图 :

上图中 点击了 ” 调用html中的js 方法“ 后的 效果

上图中 点击了 html 中的 ”调用java中的方法“ 后的 效果 这里是调用java 中的方法 弹出了一个 对话框

在android开发中 有的程序会使用webView调用外部的html 界面,有界面 就当然有交互。 嘻嘻

注意点:

AndroidManifest.xml中必须注册"android.permission.INTERNET"进行权限许可,(如果只是使用本地HTML,可以不用注册许可权限)否则会出Web page not available错误

webView的使用方式这里就不做介绍了. 但需要注意的一点是 ,要使用js 必须开启webView的js 支持, 否则webView是不支持js的喔

开启WebView 的js方法

WebView webview=(WebView)findViewById(R.id.webview);

//加上这句话才能使用javascript方法

webview.getSettings().setJavaScriptEnabled(true);

首先我们 先看看 如何在在java中调用 html中的js 方法

1: 首先创建一个测试的html

代码如下

<html>

<head>

<script type="text/javascript">

function updateHtml(){

document.getElementById("content").innerHTML =

"你通过 android 中的控件调用了html 中js 的方法";

}

</script>

</head>

<body>

this is my html <a onClick="window.login.startFunction()" href="";>调用java中个的方法</a>

<span id="content"></span>

</body>

</html>

把上面代码保存为 demo.html 放到android 项目下面assets目录下面

上面的代码中,包含了一个js 方法 ,我们接下来看看 如何在 activity中调用这个js 方法。 直接看代码

布局文件

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<WebView

android:layout_weight="9"

android:id="@+id/webview"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

/>

<Button

android:layout_weight="1"

android:id="@+id/button"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="调用html中的js 方法"

/>

<Button

android:layout_weight="1"

android:id="@+id/button1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="重新加载html"

/>

</LinearLayout>

程序代码

public class MainActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//获取webView 控件

final WebView webview=(WebView)findViewById(R.id.webview);

//加上这句话才能使用javascript方法

webview.getSettings().setJavaScriptEnabled(true);

//加载公网中的 html界面

//webview.loadUrl("http://128.128.191.62/cn/mobile/geturl.html");

//加载sdcard中的 html界面

webview.loadUrl("file:///sdcard/demo.html");

//加载assets目录下面的demo.html 界面

webview.loadUrl("file:///android_asset/demo.html");

Button button=(Button)findViewById(R.id.button); //获取button控件 即"调用html中的js方法" 按钮

//给button添加事件响应,执行JavaScript的fillContent()方法

button.setOnClickListener(new Button.OnClickListener() {

public void onClick(View v) {

webview.loadUrl("javascript:updateHtml()");

}

});

Button button1=(Button)findViewById(R.id.button1);//获取button1控件 即"重新加载html "按钮

//给button添加事件响应,执行JavaScript的fillContent()方法

button1.setOnClickListener(new Button.OnClickListener() {

public void onClick(View v) {

Log.d("MainActivity","button1 OnClick");

webview.loadUrl("http://www.163.com");

}

});

}

}

上面代码中 蓝色部分代码就是调用的 html中的js 方法 , 点击 调用html中的js方法 按钮会更新html内容

那反过来 又如何 在 html中调用java 里面的方法 呢 , 同样好简单的 , 我们看看下面的 代码

public class MainActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//获取webView 控件

final WebView webview=(WebView)findViewById(R.id.webview);

//加上这句话才能使用javascript方法

webview.getSettings().setJavaScriptEnabled(true);

//webview.loadUrl("http://128.128.191.62/cn/mobile/geturl.html");

//加载assets目录下面的demo.html 界面

webview.loadUrl("file:///android_asset/demo.html");

Button button=(Button)findViewById(R.id.button); //获取button控件 即"调用html中的js方法" 按钮

//给button添加事件响应,执行JavaScript的fillContent()方法

button.setOnClickListener(new Button.OnClickListener() {

public void onClick(View v) {

Log.d("MainActivity","button OnClick");

webview.loadUrl("javascript:showDialog()");

}

});

Button button1=(Button)findViewById(R.id.button1);//获取button1控件 即"重新加载html "按钮

//给button添加事件响应,执行JavaScript的fillContent()方法

button1.setOnClickListener(new Button.OnClickListener() {

public void onClick(View v) {

Log.d("MainActivity","button1 OnClick");

webview.loadUrl("http://128.128.191.62/cn/mobile/geturl.html");

//return

}

});

//增加接口方法,让html页面调用 第二个参数为别名,在html 中调用会使用

webview.addJavascriptInterface(this,"login");

}

public void startFunction(){

AlertDialog.Builder ab=new AlertDialog.Builder(MainActivity.this);

ab.setTitle("提示");

ab.setMessage("通过js 调用了 java 中的方法");

ab.setPositiveButton("确定", new DialogInterface.OnClickListener()

{

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

}

});

ab.create().show();

}

}

上面蓝色代码部分 定义了java一个方法 并且在主线程中将本身的java 实例 添加到 webView 中去,这样就可以在 在 html中 使用 window.login.startFunction()就可以在html 中调用java 中间的方法 。

赶快去试试吧 。

http://blog.51cto.com/ext/down_att.php?aid=35928&code=0219 代码 下载地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android WebView 是一个能够在 Android 应用程序中嵌入网页的组件,它可以开发出能够与 Web 页面进行交互的应用。其中与 Web 页面进行交互的一种方法是与 JavaScript 进行交互。下面简要解释一下 Android WebViewJS 交互的方式。 1. 加载本地 HTML 文件 在 Android WebView 中加载本地 HTML 文件时,需要使用 loadUrl() 方法加载。HTML 文件中的 JavaScript 可以通过 WebView 提供的 addJavascriptInterface() 方法注册为 Java 中的一个对象,然后在 Java 中调用该对象的方法,即可实现 JSJava交互。 2. 加载远程 Web 页面 在 Android WebView 中加载远程 Web 页面时,需要添加 WebViewClient 和 WebChromeClient,分别是用来管理 WebView 的网络请求和处理页面上的 JavaScript 弹窗等请求。 在远程 Web 页面上,JS 代码可以通过 WebView 提供的 addJavascriptInterface() 方法注册为 Java 中的一个对象,然后在 Java 中调用该对象的方法,即可实现 JSJava交互。 同时,在 Android 中处理 JS 的事件需要通过 JavaScriptInterface 向 WebView 注册一个映射对象,来实现 JSJava 相互调用的机制,静态 HTML 文件是通过 WebView 中的 evaluateJavascript() 方法来调用 JS,来实现双向通信和数据交互。 总结来说,Android WebViewJS 交互的方式主要是通过 WebView 提供的 addJavascriptInterface() 方法注册为 Java 中的一个对象,然后在 Java 中调用该对象的方法,来实现 JSJava交互。同时,JS 也可以通过 WebView 的 evaluateJavascript() 方法来调用 Java 中的方法,实现双向通信和数据交互

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值