webView.addJavascriptInterface 用法
在这里我们引用Google的一个事例下面是我Google给提供的一个dome的地址:点击打开链接
我们先看它的HTML文件,HTML的文件路径是在:点击打开链接
他的代码为:
<html><script language="javascript">/* This function is invoked by the activity *//* 这个函数被Activity调用的活动 这里的图片我们可以在它的连接里面下载 android_waving.png */function wave() {/* 这里是一个javascript 自定义函数,这是由我们在android的程序里调用的,不在在HTML中调用*/document.getElementById("droid").src="android_waving.png";}</script><body><!-- Calls into the javascript interface for the activity --><!-- 从HTML文件中调用activity中的函数 --><!-- 也就是从HTML到android程序 留意window.demo.clickOnAndroid()这句话 --><a onClick="window.demo.clickOnAndroid()"><div style="width:80px;margin:0px auto;padding:10px;text-align:center;border:2px solid #202020;" ><!-- 图片默认的为 android_normal.png --><img id="droid" src="android_normal.png"/><br>Click me!</div></a></body>
</html>
这里我做了注释,可能你会看不懂,没有关系,下面我们就再看的activity的代码吧。点击打开链接
由于他的源码比较长,我就不多全部都贴进来了,我只贴一下重要的部分就好了…….貌似都重要,还是全贴吧
package com.google.android.webviewdemo;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebViewpublic class WebViewDemo extends Activity {private static final String LOG_TAG = "WebViewDemo";private WebView mWebView;private Handler mHandler = new Handler();@Overridepublic void onCreate(Bundle icicle) {super.onCreate(icicle);setContentView(R.layout.main);mWebView = (WebView) findViewById(R.id.webview);WebSettings webSettings = mWebView.getSettings();webSettings.setSavePassword(false);webSettings.setSaveFormData(false);// 下面的一句话是必须的,必须要打开javaScript不然所做一切都是徒劳的webSettings.setJavaScriptEnabled(true);webSettings.setSupportZoom(false);mWebView.setWebChromeClient(new MyWebChromeClient());// 看这里用到了 addJavascriptInterface 这就是我们的重点中的重点// 我们再看他的DemoJavaScriptInterface这个类。还要这个类一定要在主线程中mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");mWebView.loadUrl("file:///android_asset/demo.html");}// 这是他定义由 addJavascriptInterface 提供的一个Objectfinal class DemoJavaScriptInterface {DemoJavaScriptInterface() {}/*** This is not called on the UI thread. Post a runnable to invoke* 这不是呼吁界面线程。发表一个运行调用* loadUrl on the UI thread.* loadUrl在UI线程。*/public void clickOnAndroid() { // 注意这里的名称。它为clickOnAndroid(),注意,注意,严重注意mHandler.post(new Runnable() {public void run() {// 此处调用 HTML 中的javaScript 函数mWebView.loadUrl("javascript:wave()");}});}}
// 线下的代码可以不看,调试用的
////*** Provides a hook for calling "alert" from javascript. Useful for* 从javascript中提供了一个叫“提示框” 。这是很有用的* debugging your javascript.* 调试你的javascript。*/final class MyWebChromeClient extends WebChromeClient {@Overridepublic boolean onJsAlert(WebView view, String url, String message, JsResult result) {Log.d(LOG_TAG, message);result.confirm();return true;}}
}
这里我也做了注释,在这里他在他的类中定义了一个 clickOnAndroid()
的函数,我记不记得我们在 HTML中
看到的 window.demo.clickOnAndroid()
这句话。如果忘记了就 翻上去再看一下
,特别是我说注意的地方。是的,这里的 clickOnAndroid()
是我们android程序中的一个函数。可能你会问那.为什么是 windows.demo
.这里demo我们可以看到在
mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
这句话 中后面它加了一个demo
这个字符.我可以理解成 addJavascriptInterface
的前一个参数为HTML中的一个方法,当然我更喜欢说他为函数。demo就是个对象…呵呵,我对这也不是怎么的熟悉。至于这个window我也不知道是为什么我只知道这样写程序就可以正确的运行,如果你知道这是什么那么请你在下面的留言版里告诉我一下好吗?
现在知道怎么在HTML中怎么调用Android程序的一个方法了吧。其实就是这这么的简单,不过demo这个字符我没有试他是不是区分大小写。如果你有兴趣那么你可以去试一下它有没有区分大小写。知道了怎么样从HTML中怎么样调用Android中的方法,下面我就再研究一下,它是怎么样从Android到HTML的吧。其实这个很简单,只要使用
mWebView.loadUrl("javascript:wave()");
这句话就可以了。 这样我主解读完Google给我提供的一个demo了。下面就是让我来试一下吧,试试他的这个demo吧,因为人家给提供了源码,所以我就不贴的啦,大家把他的源码贴上去就可以实现这个啦
在下一集里我将会带领大家来怎么使用 addJavascriptInterface
怎么样从一个JavaScript 的函数中获得一个返回值。文章内容不多,还请见谅
转载请注明:Sollyu博客 » android软件开发之webView.addJavascriptInterface循环渐进【一】
webView.addJavascriptInterface 用法相关推荐
- android软件开发之webView.addJavascriptInterface循环渐进【二】
说明 文章列表 android软件开发之webView.addJavascriptInterface循环渐进[一]: http://www.sollyu.com/android-software-de ...
- android网络技术-WebView的用法
有时候我们可能会碰到一些比较特殊的需要,比如需要在应用程序里展示一些网页,加载和显示网页通畅都是浏览器的任务,但是需求里又明确指出,不允许打开系统浏览器,这个时候我们就要使用到WebView控件. 下 ...
- iOS WebView的用法
一.UIWebView 可以加载和显示某个URL的网页,也可以显示基于HTML的本地网页或部分网页: a. 加载 URL WebView = [[UIWebView alloc] initWithFr ...
- android软件开发之webView.addJavascriptInterface循环渐进【一】
首先必要的啰嗦几句,这几天写VC写的累的要死,突然间不想再写想VC了,手里面有一个andriod的手机天天玩到半夜,却从来没有写过这方面的程序,真的是悲哀啊.所以我就想写这方面的程序,用管了VC的习程 ...
- webview.addJavascriptInterface() doen not work on API 16+
http://blog.sina.com.cn/s/blog_4e1e357d0101gju8.html 常见的客户端与H5的混合编程是使用scheme+.JS bridge.provider等. 在 ...
- WebView使用解析(一)之基本用法
WebView基本用法 加载在线URL void loadUrl(String url) 这个函数主要加载url所对应的网页地址,或者用于调用网页中的指定的JS方法(调用js方法的用法,后面会讲),但 ...
- 最新android webview,Android 关于WebView全方面的使用(项目应用篇)
1.关于WebView的使用: 与JS交互 拨打电话.发送短信.发送邮件 上传图片(版本兼容) 进度条设置 字体大小设置 返回网页上一层.显示网页标题 全屏播放网络视频 首页 2.文章说明 WebVi ...
- Android爬坑之旅之WebView
不知不觉,Hybird App已经成了目前比较主流的一种开发方式. 对于用户体验要求较高或者与硬件交互较多的功能我们一般都会采用Native原生的方式来实现. 而用户交互少,偏展示类,活动类的功能我们 ...
- android webView的使用
昨天,自己用到了webView加载本地文件的内容,当时有很多内容忘记了,所以在网上查找了资料.今天,自己又查找了webview的资料,把这个知识点记录一下,避免以后再去查找资料. 1. 简介 WebV ...
最新文章
- vc richedit 指定光标位置_机械图纸·每日一符:位置度
- “傻子”阿甘的大智慧
- linux常见故障处理,[转载]Linux常见操作和故障处理汇总
- html禁用自动完成,html – 如何禁用所有主流浏览器的自动完成功能
- 中科院信工所经验_保研经验分享:实力+经验+运气=保研成功
- html5 过渡时间,CSS3 对过渡(transition)进行调速以及延时
- UpdatePanelAnimation
- 安装Exchange2007邮件系统
- 飞机大战(微信小游戏)
- 基于Matlab与Logistic Regression(逻辑回归)的瓶子密封性检测
- 计算机有线无线都无法上网,有线能上网无线不能上网 有线能用无线不能用
- IntelliJ Idea 下Png图片打开方式导致编码报错
- ehcache 缓存丢失_解决Ehcache缓存警告问题
- Android 常用控件详解
- 玩拍七不再怕,判断7的倍数有妙招
- 第七章、Spring Boot MyBatis升级篇
- MySQL8.0 OCP最新版1Z0-908认证考试题库整理-001
- Luogu P4168 [Violet]蒲公英(分块)
- vue3+quasar+capacitor开发多平台项目,使用cordova和capacitor插件(支持所有前端框架)
- 牛投客- 最新热门炒股讲解分享