Android软件开发之webView.addJavascriptInterface循环渐进【一】

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

转自:http://blog.csdn.net/kingsollyu/article/details/6656865

首先必要的啰嗦几句,这几天写VC写的累的要死,突然间不想再写想VC了,手里面有一个andriod的手机天天玩到半夜,却从来没有写过这方面的程序,真的是悲哀啊。所以我就想写这方面的程序,用管了VC的习程序的习惯,第一个程序当然是hello world。刚开始还没有什么大的问题,当到后面想写一刷Q*会员的程序的时候却发现,android的界面布局是真的难啊,怎么摆都不好看。弄得和....什么似的。气得头都大了,想想自己写了这么长时间的VC还真的没有碰到这样的界面问题,真可谓..

在verycd上看人家大牛的视频的时候听到人家说可以用html来做android的UI界面,这不仅让我眼前一亮。大笑因为我学过html开发,虽然学的不咋的,但却要比这XML好的太多了,真的是对XML头大...于是乎就入手andriod的HTML界面可是后来发现在这方面的文章那叫一个少的可惜啊,老外那边要不就是看不懂,要不就基本和我看的内容无关。因为自己是菜鸟所以就想到找个群,蹭进去找个大牛问问,谁知道进去之后,我XXX他的,居然收费,我XX它的OO,人家android都开源了问你个破问题还收费,什么道德啊。当时个气氛,,,发誓要学会,在网上写文章,让你收费,XX你个OO的。

发泄了一通舒服多了,大笑OK,啰嗦的话我就不多说了。下面就开始我们的android的webView 的HTML界面教程吧。这里我给大家一个国内大牛的HTML做界面的视频教程,不过他老人家讲的我没有听懂。

21.android的ui设计技巧.rar或者看3G手机Android应用开发第八天课程1.采用HTML设计软件界面.avi他老人家的的视频还要 [Android开发视频教程]02_12_JSON数据解析.mp4这个视频做基础。如果你也是大牛的话你也肯定看的懂的。下面就进入我们小菜阶级的开发教程了。

  1. 21.android的ui设计技巧.rar  
  2. ed2k://|file|21.android%E7%9A%84ui%E8%AE%BE%E8%AE%A1%E6%8A%80%E5%B7%A7.rar|31469120|eb9c2aa5c6b9148f83f400e3af97829b|h=dxrchv3adrzynucrnnf4desotxnbzeal|/  
  3.   
  4. 3G手机Android应用开发第八天课程1.采用HTML设计软件界面.avi  
  5. ed2k://|file|3G%E6%89%8B%E6%9C%BAAndroid%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E7%AC%AC%E5%85%AB%E5%A4%A9%E8%AF%BE%E7%A8%8B1.%E9%87%87%E7%94%A8HTML%E8%AE%BE%E8%AE%A1%E8%BD%AF%E4%BB%B6%E7%95%8C%E9%9D%A2.avi|45930496|fff4499772c89db13d1ea8492ba52086|/  
  6.   
  7. Android开发视频教程]02_12_JSON数据解  
  8. ed2k://|file|%5BAndroid%E5%BC%80%E5%8F%91%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B%5D02_12_JSON%E6%95%B0%E6%8D%AE%E8%A7%A3%E6%9E%90.mp4|61184962|e183bbb0e241dd21ed534afdab84b5e4|h=c7n7qzrmvutyt34z2xlt73irudlkqrhg|/  


由于这里是第一阶段的webView所我就写个最简单的文章,这样大家可以循环渐进的来了解addJavascriptInterface这句话是怎么用的。

在这里我们引用Google的一个事例下面是我Google给提供的一个dome的地址:点击打开链接

我们先看它的HTML文件,HTML的文件路径是在:点击打开链接

他的代码为:

  1. <html>  
  2.         <script language="javascript">  
  3.             /* This function is invoked by the activity */  
  4.             /* 这个函数被Activity调用的活动 这里的图片我们可以在它的连接里面下载 android_waving.png */  
  5.                 function wave() {  
  6.                         /* 这里是一个javascript 自定义函数,这是由我们在android的程序里调用的,不在在HTML中调用*/  
  7.                         document.getElementById("droid").src="android_waving.png";  
  8.                 }  
  9.         </script>  
  10.         <body>  
  11.             <!-- Calls into the javascript interface for the activity -->  
  12.             <!-- 从HTML文件中调用activity中的函数 -->  
  13.             <!-- 也就是从HTML到android程序 留意window.demo.clickOnAndroid()这句话 -->  
  14.             <a onClick="window.demo.clickOnAndroid()"><div style="width:80px;  
  15.                         margin:0px auto;  
  16.                         padding:10px;  
  17.                         text-align:center;  
  18.                         border:2px solid #202020;" >  
  19.                                 <!-- 图片默认的为 android_normal.png -->  
  20.                                 <img id="droid" src="android_normal.png"/><br>  
  21.                                 Click me!  
  22.                 </div></a>  
  23.         </body>  
  24. </html>  

这里我做了注释,可能你会看不懂,没有关系,下面我们就再看的activity的代码吧。点击打开链接

由于他的源码比较长,我就不多全部都贴进来了,我只贴一下重要的部分就好了.......貌似都重要,还是全贴吧

  1. package com.google.android.webviewdemo;  
  2.   
  3.   
  4. import android.app.Activity;  
  5. import android.os.Bundle;  
  6. import android.os.Handler;  
  7. import android.util.Log;  
  8. import android.webkit.JsResult;  
  9. import android.webkit.WebChromeClient;  
  10. import android.webkit.WebSettings;  
  11. import android.webkit.WebView  
  12.   
  13. public class WebViewDemo extends Activity {  
  14.     private static final String LOG_TAG = "WebViewDemo";  
  15.     private WebView mWebView;  
  16.     private Handler mHandler = new Handler();  
  17.     @Override  
  18.     public void onCreate(Bundle icicle) {  
  19.         super.onCreate(icicle);  
  20.         setContentView(R.layout.main);  
  21.         mWebView = (WebView) findViewById(R.id.webview);  
  22.   
  23.   
  24.         WebSettings webSettings = mWebView.getSettings();  
  25.         webSettings.setSavePassword(false);  
  26.         webSettings.setSaveFormData(false);  
  27.         // 下面的一句话是必须的,必须要打开javaScript不然所做一切都是徒劳的  
  28.         webSettings.setJavaScriptEnabled(true);  
  29.         webSettings.setSupportZoom(false);  
  30.   
  31.   
  32.         mWebView.setWebChromeClient(new MyWebChromeClient());  
  33.   
  34.         // 看这里用到了 addJavascriptInterface 这就是我们的重点中的重点  
  35.         // 我们再看他的DemoJavaScriptInterface这个类。还要这个类一定要在主线程中  
  36.         mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");  
  37.   
  38.   
  39.         mWebView.loadUrl("file:///android_asset/demo.html");  
  40.     }  
  41.   
  42.     // 这是他定义由 addJavascriptInterface 提供的一个Object  
  43.     final class DemoJavaScriptInterface {  
  44.         DemoJavaScriptInterface() {  
  45.         }  
  46.   
  47.         /** 
  48.          * This is not called on the UI thread. Post a runnable to invoke 
  49.          * 这不是呼吁界面线程。发表一个运行调用 
  50.          * loadUrl on the UI thread. 
  51.          * loadUrl在UI线程。 
  52.          */  
  53.         public void clickOnAndroid() {        // 注意这里的名称。它为clickOnAndroid(),注意,注意,严重注意  
  54.             mHandler.post(new Runnable() {  
  55.                 public void run() {  
  56.                     // 此处调用 HTML 中的javaScript 函数  
  57.                     mWebView.loadUrl("javascript:wave()");  
  58.                 }  
  59.             });  
  60.         }  
  61.     }  
  62. // 线下的代码可以不看,调试用的  
  63. ///////////////////////////////////////////////////////////////////////////////////////////////////  
  64.     /** 
  65.      * Provides a hook for calling "alert" from javascript. Useful for 
  66.      * 从javascript中提供了一个叫“提示框” 。这是很有用的 
  67.      * debugging your javascript. 
  68.      *  调试你的javascript。 
  69.      */  
  70.     final class MyWebChromeClient extends WebChromeClient {  
  71.         @Override  
  72.         public boolean onJsAlert(WebView view, String url, String message, JsResult result) {  
  73.             Log.d(LOG_TAG, message);  
  74.             result.confirm();  
  75.             return true;  
  76.         }  
  77.     }  
  78. }  

这里我也做了注释,在这里他在他的类中定义了一个  clickOnAndroid() 的函数,我记不记得我们在HTML中看到的   window.demo.clickOnAndroid() 这句话。如果忘记了就翻上去再看一下,特别是我说注意的地方。是的,这里的  clickOnAndroid() 是我们android程序中的一个函数。可能你会问那.为什么是windows.demo.这里demo我们可以看到在   

  1. mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");  
这句话 中后面它加了一个demo这个字符.我可以理解成 addJavascriptInterface 的前一个参数为HTML中的一个方法,当然我更喜欢说他为函数。demo就是个对象...呵呵,我对这也不是怎么的熟悉。至于这个window我也不知道是为什么我只知道这样写程序就可以正确的运行,如果你知道这是什么那么请你在下面的留言版里告诉我一下好吗?

现在知道怎么在HTML中怎么调用Android程序的一个方法了吧。其实就是这这么的简单,不过demo这个字符我没有试他是不是区分大小写。如果你有兴趣那么你可以去试一下它有没有区分大小写。知道了怎么样从HTML中怎么样调用Android中的方法,下面我就再研究一下,它是怎么样从Android到HTML的吧。其实这个很简单,只要使用  

  1. mWebView.loadUrl("javascript:wave()");  
这句话就可以了。

这样我主解读完Google给我提供的一个demo了。下面就是让我来试一下吧,试试他的这个demo吧,因为人家给提供了源码,所以我就不贴的啦,大家把他的源码贴上去就可以实现这个啦

在下一集里我将会带领大家来怎么使用 addJavascriptInterface  怎么样从一个JavaScript 的函数中获得一个返回值。文章内容不多,还请见谅

新学期领福利!购实物周边送年卡会员! T恤、键盘、双肩包等周边任选!还能解锁资源下载、VIP文章等多重会员权益! 阅读详情

相关推荐

WebViewAndroid原生通信

WebViewAndroid原生通信

ln1010的博客 2288

Android WebViewaddJavascriptInterface 探究

Java和JS交互的方式有多种,这里探讨的方式是通过以下方式进行的交互。这篇文章是想弄明白 JavaScript 和 Java是如何实现这种方式互调的,就从源码角度开始分析。

juruiyuan111的专栏 1520

安卓原生开发为何是初创企业的生存基础设施

安卓原生开发是移动应用开发的基础技术路径,指基于Android SDK、直接调用系统API构建高性能、高可控性客户端的能力。其核心原理在于绕过Web容器或跨端中间层,实现对硬件传感器、后台服务、离线存储及厂商推送等底层能力的稳定访问。相比H5、小程序或跨平台方案,原生开发在弱网适配、消息送达率、启动性能和隐私合规等方面具备不可替代的技术价值。典型应用场景包括社区团购实时订单同步、智能硬件蓝牙联动、车载Android Auto集成、金融类App安全保活等强交互、低延迟、高可靠性需求领域。对于资源有限的初创企业

weixin_30776545的博客 442

Android WebView 中实现和 JavaScript 的互操作

有两个参数。其中 object 即需要提供给 js 调用的对象。在 Android 4.1.2 (API 16) 以下时,js 可以调用该对象的所有公开方法;在 Android 4.2 (API 17)以上时, js 只能调用添加了注解的公开方法。之所以会有这样的改动,是因为在 API 16 之前可以调用所有公开方法具有安全隐患,例如可以利用 jave 的反射机制实现任意命令的执行。interfaceName 即 js 调用时的接口名称。我们可以通过 webview 的。

sinat_17133389的博客 2349

WebView 安全之 addJavascriptInterface

WebView 安全之 addJavascriptInterface 不会写代码的IT男关注 2016.01.03 18:14*字数 474阅读 5668评论 0喜欢 3 0x00 addJavascriptInterface介绍 WebViewAndroid平台下的个重要组件,通常用来在Activity中嵌入个简单的浏览器,实现在线网页浏览的功能。比如下面代码实现访问Goo...

bolang789的博客 5344

WebView addJavascriptInterface

android4.2以前,注入步骤如下: [java] view plaincopy webview.getSetting().setJavaScriptEnable(true);   class JsObject {       public String toString() { return "injectedObject"; }  

u013068229的专栏 1453

android软件开发webView.addJavascriptInterface循环渐进

代码 由于这里是第阶段的webView所我就写个最简单的文章,这样大家可以循环渐进的来了解addJavascriptInterface这句话是怎么用的。 在这里我们引用Google个事例下面是我Google给提供的个dome的地址:点击打开链接 我们先看它的HTML文件,HTML的文件路径是在:点击打开链接 他的代码为: /* This f

JMathias的博客 736

android软件开发webView.addJavascriptInterface循环渐进【二】

新建工程 为了让大家更容易的理解,所以我这里就尽量的将代码缩短,这是我的工程的配置 创建好工程之后,然后将界面调整为下面这样 添加代码 首先将两个button和webview添加进来,并给web添加两个JavaScript调用接口,testFunc1和testFunc2 private Button m_testButtom1; private Button m_te

JMathias的博客 751

android软件开发webView.addJavascriptInterface循环渐进

首先必要的啰嗦几句,这几天写VC写的累的要死,突然间不想再写想VC了,手里面有个andriod的手机天天玩到半夜,却从来没有写过这方面的程序,真的是悲哀啊。所以我就想写这方面的程序,用管了VC的习程序的习惯,第个程序当然是hello world。刚开始还没有什么大的问题,当到后面想写刷Q*会员的程序的时候却发现,android的界面布局是真的难啊,怎么摆都不好看。弄得和....什么似的。气得

jmeesky的专栏 867

Android AgentWeb WebView 与js交互总结

想必熟悉android开发的同学都知道使用原生 webview 与js 的交互方式,下面我们先来回顾下。webview 通过addJavascriptInterface 进行对象映射首先要打开交互权限 , 允许使用javascript说明:以上“ JsInterface ”、“android” 都可以自己命名,这里仅做为示例。那么使用 AgentWeb的Webview和js 的交互方式,你知道吗?其实和原生webview与js的交互还是有些出入的,接下来,我们以代码进行详细说明。根据。

w风雨无阻w的专栏 3601

webview 源码追踪addJavascriptInterface(android10)

参考 https://www.jianshu.com/p/182e4985b669 https://www.jianshu.com/p/a8ed39a17f3f webview.java关键代码 private void ensureProviderCreated() { checkThread(); if (mProvider == null) { // As this can get called during the base clas

yanjingjiangjun的专栏 2109

H5页面与原生交互的方法:webview.addJavascriptInterface

H5页面与原生交互的方法之 二、JsBridge 写在前面 js和java交互无非这两种方法: 第种就是系统提供的webview.addJavascriptInterface, 第二种就是WebViewClient.shouldOverrideUrlLoading。 addJavascriptInterface有很大的安全隐患(通过js获取高权限,盗取用户信息、运行病毒代码等等),特别是4...

Ha_Girl的博客 4491

Android:是时候掌握WebView与Js的交互技术了

自我介绍下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里直到现在。深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!因此收集整理了份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

2401_84093899的博客 876

webView.addJavascriptInterface 用法

在这里我们引用Google个事例下面是我Google给提供的个dome的地址:点击打开链接 我们先看它的HTML文件,HTML的文件路径是在:点击打开链接 他的代码为: /* This function is invoked by the activity */ /* 这个函数被Activity调用的活动

chuyouyinghe的专栏 2341

Android之如何使用javascript调用android代码

使用javascript调用android代码 1.使用webview对象的addJavascriptInterface方法 2.addJavascriptInterface方法有两个参数,第个参数就是我们般会实现个自己的类,类里面提供我们要提供给javascript访问的方法;第二个参数是访问我们在obj中声明的方法时候所用到的js对象,调用模式为window.interf...

275
下一篇: Android 的消息队列模型
Cesborn
博客等级 码龄16年 2粉丝 1原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值