Android与JS互相调用以及注意
近期项目中常常使用Html5而Android与JS调用常常会用到,这里记录一下,測试系统5.0以上。
这里先贴一下源代码
Activity:
package jwzhangjie.com.webviewandjs; import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast; public class MainActivity extends AppCompatActivity { private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView)findViewById(R.id.webView);
initWebView();
} private void initWebView(){
//设置编码
webView.getSettings().setDefaultTextEncodingName("utf-8");
//支持js
webView.getSettings().setJavaScriptEnabled(true);
//设置监听事件
webView.setWebViewClient(new JieWewViewClient());
//设置本地调用对象及其接口
webView.addJavascriptInterface(new JavaScriptObject(getApplicationContext()), "toAndroid");
//载入js
webView.loadUrl("file:///android_asset/index.html");
} public void javaCallJsNoParams(View view){
webView.loadUrl("javascript:javaCallJsNoParamsMethod()");
} public void javaCallJsHasParams(View view){
webView.loadUrl("javascript:javaCallJsHasParamsMethod('" + 123 + "')");
} public class JavaScriptObject { Context mContxt; public JavaScriptObject(Context mContxt) {
this.mContxt = mContxt;
} @JavascriptInterface //sdk17版本号以上加上注解
public void jsCallJavaNoParams() {
Toast.makeText(mContxt, "Js调用Java方法(无參)", Toast.LENGTH_LONG).show();
} @JavascriptInterface //sdk17版本号以上加上注解
public void jsCallJavaHasParams(String params) {
Toast.makeText(mContxt, "Js调用Java方法(有參):" + params, Toast.LENGTH_SHORT).show();
}
} class JieWewViewClient extends WebViewClient{
/**
* 假设紧跟着
* webView.loadUrl("file:///android_asset/index.html");
* 调用Js中的方法是不起作用的,必须页面载入完毕才干够
*/ @Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
webView.loadUrl("javascript:javaCallJsHasParamsMethod('" + 123 + "')");
}
} }
html:
<!DOCTYPE HTML>
<HTML>
<HEAD>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
</HEAD>
<BODY>
<div>
<input type="text" id="showText" style="width:100%;height:100px;margin-bottom:10px" readonly>
<input type="button" onclick="jsCallJavaNoParamsMethod()" value="Js调用Java方法(无參)">
<input type="button" onclick="jsCallJavaHasParamsMethod('成功了')" value="Js调用Java方法(有參)">
</div>
</BODY>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
function javaCallJsNoParamsMethod(){
$('#showText').val("Java调用js方法,无參数");
} function javaCallJsHasParamsMethod(params){
$('#showText').val("Java调用Js方法。有參数:"+params);
} function jsCallJavaNoParamsMethod(){
toAndroid.jsCallJavaNoParams();
} function jsCallJavaHasParamsMethod(params){
toAndroid.jsCallJavaHasParams(params);
}
</script>
</HTML>
界面:
注意点:
1、Android系统17以及以上,js调用java须要在方法上面增加@JavascriptInterface
2、不能在载入html页面的以下直接调用js方法,应该在WebViewClient的onPageFinished里面载入,原则就是必须html载入完毕后。才干调用js中的方法。
源代码:http://download.csdn.net/download/jwzhangjie/9020941
Android与JS互相调用以及注意的更多相关文章
- Android与js互相调用
有话要说: 本篇主要总结了简单的Android与js互相调用的方法. 在开发过程中遇到了需要在安卓中调用js方法的需求,于是将具体的实现过程总结成这篇博客. 效果: 其中“调用安卓方法”按钮是html ...
- android和js互相调用
import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.o ...
- Android 使用js调用Java
效果如: 主要用到一个接口类:MyObject package com.example.jsdemo; import android.content.Context; import android.s ...
- Android与JS混编(js调用java)
项目中需要使用android与js的混编来开发app. 下面就介绍一下吧. 有时候我们需要用js调用native控件,要想实现这个功能,我们需要做的就只有三步: 1.允许webview执行js脚本 2 ...
- Android开发学习之路--Java和Js互相调用
随着前端的火热,以前开发的快速,越来越多的native app在其中融合了h5,就拿淘宝就是很多的h5组成的,一旦出现什么节日,他都可以不用通过更新app来实现界面的改变,而且android和io ...
- android js 互相调用
代码地址如下:http://www.demodashi.com/demo/13107.html android js 互相调用 第二版 支持js匿名函数接收 支持js json对象接收 支持js函数返 ...
- Android和JavaScript相互调用的方法
转载地址:http://www.jb51.net/article/77206.htm 这篇文章主要介绍了Android和JavaScript相互调用的方法,实例分析了Android的WebView执行 ...
- Android-webview和js互相调用
Android-webview和js互相调用 Android 和 H5 都是移动开发应用的非常广泛.市面上很多App都是使用Android开发的,但使用Android来开发一些比较复杂附属类,提示性的 ...
- android webview js交互 第一节 (java和js交互)
转载请注明出处 挺帅的移动开发专栏 http://blog.csdn.net/wangtingshuai/article/details/8631835 在androi ...
随机推荐
- windows系统下nodejs安装、环境配置及删除NPM全局配置
nodejs安装及设置NPM全局路径 删除NPM全局路径配置 一.nodejs安装及设置NPM全局路径 第一步:下载安装文件 下载nodejs,官网:http://nodejs.org/downloa ...
- 5.17从零开始搭建springboot-dubbo的例子
https://www.cnblogs.com/baijinqiang/p/10848259.html
- 前端面试基础-html篇之H5新特性
h5的新特性(目前个人所了解)如下 语义化标签 表单新特性 视频(video)和音频(audio) canvas画布 svg绘图 地理定位 为鼠标提供的拖放API webworker (重点)Stor ...
- Leetcode0092 & 0206--Reverse Linked List 链表逆转
[转载请注明]http://www.cnblogs.com/igoslly/p/8670038.html 链表逆序在链表题目中还是较为常见的,这里将Leetcode中的两道题放在一起,分别是 0092 ...
- iconfont在ios(safari)中的坑
最近公司决定将项目图标整体迁移到iconfont,按网上常规方法,在安卓.pc端都没问题,唯独在ios的safari浏览器及微信内置浏览器中,iconfont始终在正常位置向下偏移,导致图标错乱. 网 ...
- Content-Encoding值
Content-Encoding值 gzip 表明实体采用GNU zip编码 compress 表明实体采用Unix的文件压缩程序 deflate 表明实体是用zlib的格式压缩的 identity ...
- apicloud常用分享方法
app中经常会有分享的功能,不管是分享商品还是文字还是图片或者是发送给微信好友扣扣好友,一下做一总结. 分享的样式(分享所有的样式模块):MNActionButton. 在apicloud 中添加这个 ...
- JAVA中浅复制与深复制
1.浅复制与深复制概念⑴浅复制(浅克隆)被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵深复 ...
- BZOJ 1705: [Usaco2007 Nov]Telephone Wire 架设电话线 DP + 优化 + 推导
Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= ...
- Android 性能测试初探(五)
书接上文 Android 性能测试初探之 GPU(四) 前文说了的一些性能测试项大家可能都听说,接下来我们聊聊大家不常关注的测试项- 功耗 . 功耗测试主要从以下几个方面入手进行测试 测试手机安装目标 ...